我有以下数据框:
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
具有不同行的按组语句中,这是行不通的。
答案 0 :(得分:2)
在按“ group1”分组后,我们在length.out
中指定了rep
library(dplyr)
a %>%
group_by(group1) %>%
mutate(new = rep(seq_len(n()/2), each = 2, length.out = n()))
注意:each
和times
不在同一呼叫中使用。我们使用each
或times
编辑:基于@ 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