2

次のような R データフレームがあるとします。ここでend.group、観測の一意のグループの終わりを意味します。

x <- data.frame(end.group=c(0,0,1,0,0,1,1,0,0,0,1,1,1,0,1))

以下を返したいと思います。ここで、group.countはグループ内の観測数の実行中のカウントであり、groupは各グループの一意の識別子です (番号順)。これを行うためのRコードを手伝ってくれる人はいますか?

end.group group.count group
0         1           1
0         2           1
1         3           1
0         1           2
0         2           2
1         3           2
1         1           3
0         1           4
0         2           4
0         3           4
1         4           4
1         1           5
1         1           6
0         1           7
1         2           7
4

2 に答える 2

4

groupとを使用してcumsum作成できますrevrevグループのエンドポイントがあるため、必要です。

x <- data.frame(end.group=c(0,0,1,0,0,1,1,0,0,0,1,1,1,0,1))
# create groups
x$group <- rev(cumsum(rev(x$end.group)))
# re-number groups from smallest to largest
x$group <- abs(x$group-max(x$group)-1)

aveを使用して作成できるようになりましgroup.countた。

x$group.count <- ave(x$end.group, x$group, FUN=seq_along)
于 2012-07-26T14:56:24.860 に答える