在R中将cumsum值重置为零

时间:2014-02-05 15:32:01

标签: r

我有问题。例如,我有这个:

id  truth count
1   1     1
2   1     2
3   0     0
4   1     1
5   1     2
6   1     3
8   0     0

我试过了:

fun <- rle(df$truth)

df$count <- unlist(sapply(fun$lengths, function(x) {return(1:x)}))

但它没有用。

1 个答案:

答案 0 :(得分:6)

这是一种方法。基于ave

transform(dat, count = truth * ave(truth, c(0L, cumsum(diff(truth) != 0)), 
                                   FUN = seq_along))

其中dat是数据框的名称。