按组重复序列

时间:2018-11-07 18:33:02

标签: r

我有以下数据框:

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具有不同行的按组语句中,这是行不通的。

2 个答案:

答案 0 :(得分:2)

在按“ group1”分组后,我们在length.out中指定了rep

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

注意:eachtimes不在同一呼叫中使用。我们使用eachtimes

编辑:基于@ r2evans的评论

答案 1 :(得分:2)

一个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