【发布时间】:2011-12-31 13:19:03
【问题描述】:
我有一个数据框,我在该数据框上计算特定列的运行长度编码。 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 代码。我觉得好像应该有另一种没有循环的方法。
【问题讨论】:
-
您能提供一些示例数据吗?这会有所帮助。
-
如果我误解了您的数据框的结构,请告诉我。您可以使用
dput(yourDataHere)的输出更新您的问题。如果太大,请使用subset()或head()使示例大小合适。
标签: r vectorization plyr data.table