R 计算不同序列的累积乘积
我有以下数据表: ` 我想为零之间的序列做一个累加积,这样我可以得到以下结果: 我需要对几个大型数据集执行此操作,但找不到有效的计算方法。我希望有人能帮忙,并提前表示感谢R 计算不同序列的累积乘积,r,R,我有以下数据表: ` 我想为零之间的序列做一个累加积,这样我可以得到以下结果: 我需要对几个大型数据集执行此操作,但找不到有效的计算方法。我希望有人能帮忙,并提前表示感谢 > y=rle(!!x) > y$values=1:length(y$values) > ave(x,inverse.rle(y),FUN = cumprod) [1] 0 0 3 3 9 36 180 1080 0 0 3 15 105 编写
> y=rle(!!x)
> y$values=1:length(y$values)
> ave(x,inverse.rle(y),FUN = cumprod)
[1] 0 0 3 3 9 36 180 1080 0 0 3 15 105
编写一个函数并将其应用于data.frame:
f=function(x){
y=rle(!!x)#(x!=0)
y$values=1:length(y$values)
ave(x,inverse.rle(y),FUN = cumprod)
}
rapply(df1,f,"numeric",how="replace")
V1 V2
1 0 0
2 1 0
3 3 3
4 6 3
5 0 9
6 0 36
7 5 180
8 5 1080
9 10 0
10 0 0
这里有一个使用
rle
和cumprod
的选项。我们使用lappy
循环遍历数据集的列,使用rle
创建分组列,然后使用ave
获得累积乘积(cumprod
)
df1[]不要将数据作为图像发布,请学习如何给出一个您可能可以使用?cumprod
对累积产品和?数据进行分组的图像。table::rleid
按零分组。右。我在测试前写过。删除了我的噪音,没关系。它发生了:)我想我已经看到了那个模因:“噪音发生了”。从没听说过那个哈哈
df1[] <- lapply(df1, function(x) {
r1 <- rle(x!=0)
ave(x, rep(seq_along(r1$values), r1$lengths), FUN = cumprod)
})
df1
# V1 V2
#1 0 0
#2 1 0
#3 3 3
#4 6 3
#5 0 9
#6 0 36
#7 5 180
#8 5 1080
#9 10 0
#10 0 0
df1 <- data.frame(V1 = c(0, 1, 3, 2, 0, 0, 5, 1, 2, 0),
V2 = c(0, 0, 3, 1, 3, 4, 5, 6, 0, 0))