数据帧R中的累积计数器

时间:2014-02-13 17:17:59

标签: r dataframe counter cumsum

我有一个包含许多行的数据框,但结构如下所示:

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

我需要添加一个计数器作为第三列。它应该计算包含零的累积单元格,直到遇到值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 )

1 个答案:

答案 0 :(得分: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