gpt4 book ai didi

r - R中的for循环计算列表的平均值

转载 作者:行者123 更新时间:2023-12-02 08:42:18 25 4
gpt4 key购买 nike

这个post也经过交叉验证,我被指示在此处发帖。

我有一个名为 d 的列表,其中包含 R 中的值。

> d
$`2017-07-15:10:09:22`
[1] 3.125 4.375 2.500 0.625 5.000 3.750 1.875 1.250

$`2017-07-15:10:10:04`
[1] 0.625 3.750 3.125 1.875 1.250 4.375 2.500 5.000

$`2017-07-15:11:45:45`
[1] 4.375 3.125 3.750 2.500 5.000 1.875 1.250 0.625

我有兴趣计算这些点的平均值并将其保存到数据框中。所以,我做了一个 for 循环来做到这一点

l2 <- length(d)
for(j in 1:6)
{
df$Mean[j] <- (d[[1]][j]
+ d[[2]][j] + d[[3]][j])/l2

}

列表d的长度每次都会变大。我想让这个 for 循环自行计算平均值。像这样..

l2 <- length(d)   
for(j in 1:6)
{
df$Mean[j] <- (d[[1]][j]
+ d[[2]][j] + d[[3]][j] + d[[4]][j] + ....
)/l2

}

如何让这个循环自动执行?谢谢。

最佳答案

正如 @F.Maas 正确指出的那样,您不需要在此处循环。

但是如果我正确理解你的问题,你想要的是所有列表元素上每个点的平均值,而不是每个列表元素内的点的平均值。

如果我的假设是正确的,这段代码应该可以满足您的需要,甚至不需要lapply:

#create test data and names
d <- lapply(1:3,function(x) runif(6))
names(d) <- sample(LETTERS,length(d))

> d
$V
[1] 0.9369505 0.7825348 0.4549225 0.3807600 0.7169146 0.3608166

$Z
[1] 0.75466094 0.09207062 0.59738221 0.33558258 0.79022386 0.98266940

$G
[1] 0.3441581 0.6696056 0.5544217 0.7422718 0.6682706 0.7989314


#calculate means

res <- colMeans(do.call(rbind,d))

现在您已经有了每个点的均值。您可以将它们添加到现有的 data.frame 中或创建一个新的。

#put into df

df <- data.frame(means=res)

#output

> df
means
1 0.6785898
2 0.5147370
3 0.5355755
4 0.4862048
5 0.7251363
6 0.7141391

因此,您唯一需要的是 colMeans(do.call(rbind,d)),它将您的列表折叠成一个矩阵,每列代表一个点。之后我就可以使用 colMeans 来计算平均值。

关于r - R中的for循环计算列表的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45116366/

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