我有以下数据框:

a <-  data.frame(
  group1=factor(rep(c("a","b"),each=6,times=1)),
  time=rep(1:6,each=1,times=2),
  newcolumn = c(1,1,2,2,3,3,1,1,2,2,3,3)
)

我正在寻找通过rep by group函数复制newcolumn的输出(那里的time变量用于订购)。换句话说,对于每个按时间排序的组,如何分配序列1,1,2,2,n,n?我还需要一个通用的解决方案(在组的行数不同的情况下,或者我想重复3,10,n次值)。

例如,我可以使用以下命令生成该序列:newcolumn=rep(1:3,each=2,times=2)
但这在group1具有不同行的group by语句中不起作用。

最佳答案

data.table替代:

library(data.table)
DT <- as.data.table(a[1:2])

DT[order(time),newcolumn := rep(seq_len(.N/2), each=2, length.out=.N),by=c("group1")]
DT
#     group1 time newcolumn
#  1:      a    1         1
#  2:      a    2         1
#  3:      a    3         2
#  4:      a    4         2
#  5:      a    5         3
#  6:      a    6         3
#  7:      b    1         1
#  8:      b    2         1
#  9:      b    3         2
# 10:      b    4         2
# 11:      b    5         3
# 12:      b    6         3

关于r - 按组重复序列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53195658/

10-11 08:04