如何计算列中的更改

时间:2013-07-11 14:21:05

标签: r counter

我正在寻找一种简单的方法来计算列中发生的变化" AA"我的数据框;所以新专栏" BB"应该看起来像下面给出的df:

df <- as.data.frame(cbind("Year"=c(2000,2000,2000,2001,2001,2001,2002,2002,2002,2003), "AA"=c(136,137,137,158,162,21,21,55,55,55), "BB"=c(1,2,2,3,4,5,5,6,6,6)))

换句话说,&#34; AA&#34;中的任何变化(增加或减少);应该在&#34; BB&#34;加起来......

2 个答案:

答案 0 :(得分:6)

我喜欢rle

foo <- rle(df$AA)
foo$values <- 1:length(foo$values)
df$BB <- inverse.rle(foo)

答案 1 :(得分:6)

我更喜欢这样使用cumsum

df$BB <-  cumsum(c(1, head(df$AA, -1) != tail(df$AA, -1)))

基于x <- sample(1:10,1e4,TRUE)的基准:

Unit: microseconds
   expr  min   lq median   uq  max neval
 Jus(x) 1259 1330   1936 1987 5289   100
 Rol(x)  391  402    463  616 3903   100