我正在寻找一种简单的方法来计算列中发生的变化" 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;加起来......
答案 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