gpt4 book ai didi

用 apply 替换 for 循环以提高性能(使用 weighted.mean)

转载 作者:行者123 更新时间:2023-12-01 12:56:24 24 4
gpt4 key购买 nike

我是 R 新手,所以希望这对你们中的一些人来说是一个可以解决的问题。我有一个包含超过一百万个数据点的数据框。我的目标是计算具有变化起点的加权平均值。

为了说明这个框架 (data.frame(matrix(c(1,2,3,2,2,1),3,2)) )

  X1 X2
1 1 2
2 2 2
3 3 1

其中X1是数据,X2是采样权重。

我想计算 X1 从起点 1 到起点 3、起点 2:3 和起点 3:3 的加权平均值。

我简单地写了一个循环:

B <- rep(NA,3) #empty result vector
for(i in 1:3){
B[i] <- weighted.mean(x=A$X1[i:3],w=A$X2[i:3]) #shifting the starting point of the data and weights further to the end
}

使用我的真实数据,这是不可能计算的,因为每次迭代都会更改 data.frame,并且计算需要数小时而没有结果。

有没有办法通过应用命令实现不同的起点,从而提高性能?

问候,鲁本

最佳答案

根据@joran 的回答生成正确的结果:

with(A, rev(cumsum(rev(X1*X2)) / cumsum(rev(X2))))
# [1] 1.800000 2.333333 3.000000

另请注意,这比 sapply/lapply 方法快

关于用 apply 替换 for 循环以提高性能(使用 weighted.mean),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9608166/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com