私は次のデータフレームを持っています:
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
rep by group関数を使用しての出力を複製しようとしています(time
変数は順序付けのためにあります)。つまり、グループごとに、時間順に並べて、シーケンスを割り当てるにはどうすればよい1,1,2,2,n,n
ですか?また、一般的な解決策も必要です(グループの行数が異なる場合、または値を3,10,n
何度も繰り返したい場合)。
たとえば、次のようにしてそのシーケンスを生成できます。 newcolumn=rep(1:3,each=2,times=2)
ただし、group1
行が異なるgroupbyステートメントでは機能しません。
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
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加