首页 > 解决方案 > 如何在每隔一行(奇数)中取值并将它们转移到每一行(偶数和奇数)或将它们切换到其他行(偶数)?

问题描述

您如何获取每隔一行(奇数)中的值并将它们转移到每一行(偶数和奇数)或将它们切换到其他行(偶数)?在数据框中,我每隔一行都有值。我希望它们出现在列的每一行中。我如何实现这一目标?另一种解决方案是切换它们,使它们仅是偶数,而不是奇数。

它当前的外观示例:

set.seed(5)
output<-data.frame(matrix("", nrow=500, ncol=1))
for(i in 1:nrow(output)){
  if(i %% 2 == 0){
    output[i,1] <- sample(c("A","B","C"),1,replace = T)
  }
}
colnames(output) <- "work"

我希望它显示为:

set.seed(5)
output<-data.frame(matrix("", nrow=500, ncol=1))
for(i in 1:nrow(output)){
    output[i,1] <- sample(c("A","B","C"),1,replace = T)
}
colnames(output) <- "work"

标签: rdata-cleaning

解决方案


如果我理解正确,请创建一个选择您想要的值的索引

> idx = seq(2, nrow(output), by = 2)

并使用idx - 1选择要替换的行

> output[idx - 1, "work"] = output[idx, "work"]
> head(output)
  work
1    B
2    B
3    C
4    C
5    A
6    A

如果有奇数行,您希望最后一行发生什么并不清楚?

请注意,生成原始数据的更有效 / R 方式可能是

df = data.frame(work = character(500))
idx = seq(2, nrow(df), by = 2)
df[idx, "work"] = sample(c("A", "B", "C"), length(idx), replace = TRUE)

推荐阅读