代码之家  ›  专栏  ›  技术社区  ›  SlyGrogger

按组重复序列

r
  •  1
  • SlyGrogger  · 技术社区  · 6 年前

    我有以下数据帧:

    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)
    )
    

    我想复制 newcolumn time 1,1,2,2,n,n ? 我还需要一个通用的解决方案(在组的行数不同的情况下,或者我想要重复值的情况下) 3,10,n 次)。

    例如,我可以用以下命令生成序列: newcolumn=rep(1:3,each=2,times=2)

    group1 有不同的行。

    2 回复  |  直到 6 年前
        1
  •  2
  •   r2evans    6 年前

    A. 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
    
        2
  •  2
  •   akrun    6 年前

    length.out rep 按“group1”分组后

    library(dplyr)
    a %>% 
      group_by(group1) %>% 
      mutate(new = rep(seq_len(n()/2), each = 2, length.out = n()))
    

    each times 不在同一个调用中使用。要么我们用

    编辑:基于@r2evans的评论