我有一个数据框,我在其上计算特定列的运行长度编码。列的值为dir
-1、0 或 1。
dir.rle <- rle(df$dir)
然后,我获取运行长度并计算数据框中另一列的分段累积总和。我正在使用 for 循环,但我觉得应该有一种方法可以更智能地做到这一点。
ndx <- 1
for(i in 1:length(dir.rle$lengths)) {
l <- dir.rle$lengths[i] - 1
s <- ndx
e <- ndx+l
tmp[s:e,]$cumval <- cumsum(df[s:e,]$val)
ndx <- e + 1
}
的运行长度dir
定义每次运行的开始s
和结束e
。上面的代码有效,但感觉不像是惯用的 R 代码。我觉得好像应该有另一种没有循环的方法。