相关疑难解决方法(0)

通过R中的因子向量化cumsum

我试图在一个非常大的数据框(约220万行)中创建一个列,计算每个因子级别的1的累积和,并在达到新的因子级别时重置.以下是一些类似于我自己的基本数据.

itemcode <- c('a1', 'a1', 'a1', 'a1', 'a1', 'a2', 'a2', 'a3', 'a4', 'a4', 'a5', 'a6', 'a6', 'a6', 'a6')
goodp <- c(0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1)
df <- data.frame(itemcode, goodp)
Run Code Online (Sandbox Code Playgroud)

我想输出变量cum.goodp看起来像这样:

cum.goodp <- c(0, 1, 2, 0, 1, 1, 2, 0, 0, 1, 1, 1, 2, 0, 1)
Run Code Online (Sandbox Code Playgroud)

我知道那里有很多使用规范的split-apply-combine方法,从概念上讲它是直观的,但我尝试使用以下方法:

k <- transform(df, cum.goodp = goodp*ave(goodp, c(0L, cumsum(diff(goodp != 0)), FUN = seq_along, by = itemcode)))
Run Code Online (Sandbox Code Playgroud)

当我尝试运行此代码时,它非常慢.我得到的变化是其中一部分原因('by'也没有帮助).itemcode变量有超过70K的不同值,因此它应该是矢量化的.有没有办法使用cumsum对其进行矢量化?如果没有,任何帮助都将得到真正的赞赏.非常感谢.

r vectorization cumsum

5
推荐指数
2
解决办法
353
查看次数

标签 统计

cumsum ×1

r ×1

vectorization ×1