如何在每隔一行(奇数)中取值并将它们移动到每一行(偶数和奇数)或将它们切换到其他行(偶数)?

How to take values in every other row (odd) and shift them to be in every row (even and odd) or switch them to other rows (even)?

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

当前外观示例:

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"

如果我没理解错的话,请创建一个 select 包含您想要的值的索引

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

并使用 idx - 1 到 select 要替换的行

> 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)
  row_odd <- seq_len(nrow(output)) %% 2 
  output[row_odd == 1, 1] <- data_row_even
  output[row_odd == 0, 1] <- NA