1

多くの行を持つデータフレームがありますが、構造は次のようになります。

year factor
1    0
2    0
3    0
4    0
5    0
6    0
7    0
8    0
9    1
10   0
11   0
12   0
13   0
14   0
15   0
16   0
17   1 
18   0
19   0
20   0

3 番目の列としてカウンターを追加する必要があります。値 1 が検出されると、再びゼロに設定されるまで、ゼロを含む累積セルをカウントする必要があります。結果は次のようになります。

year factor count
1    0      0
2    0      1
3    0      2
4    0      3
5    0      4
6    0      5
7    0      6
8    0      7
9    1      0
10   0      1
11   0      2
12   0      3
13   0      4
14   0      5
15   0      6
16   0      7
17   1      0
18   0      1
19   0      2
20   0      3

何百ものファイルの操作を行う必要があるため、ループを避けて迅速に実行できれば幸いです。

私のデータフレームをコピーして、"..."ここにデータフレームを貼り付けることができます:

dt <- read.table( text="...", , header = TRUE )
4

1 に答える 1

2

おそらく、次のような解決策aveがうまくいくでしょう:

A <- cumsum(dt$factor)
ave(A, A, FUN = seq_along) - 1
#  [1] 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3

元の答え:

(最初の値が「0」であることを見逃していました。おっと。)

x <- rle(dt$factor == 1)
y <- sequence(x$lengths)
y[dt$factor == 1] <- 0
y
#  [1] 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 0 1 2 3
于 2014-02-13T17:25:56.440 に答える