【发布时间】:2017-06-23 15:28:09
【问题描述】:
我在一个列表中有一些数据帧,它们都具有相同的结构——在这个例子中是变量 a、b 和 c。现在我想总结一下列表中值的平均值。
# list of 10 random data frames
n <- 1e1
initSeed <- 1234
set.seed(initSeed)
(seedVec <- sample.int(n = 1e3, size = n, replace = FALSE))
lst <- lapply(1:n, function(i){
set.seed(seedVec[i])
a <- rnorm(24,1,.1)
b <- rnorm(24,2,.2)
c <- rnorm(24,3,.3)
df <- data.frame(a,b,c)
})
我尝试向 dplyr 提供 lst %>% summarize_all(mean),但他不喜欢列表。下面的公式为我提供了列表中每个数据帧的平均值,但还没有给出所有数据帧中这些变量 a、b 和 c 的平均值。
lapply(1:10, function(n){
lst[n] %>%
data.frame() %>%
summarize_all(mean)
})
所以我想用汇总的输出制作一个新的数据框,以便再次汇总它们,但这失败了,我的扩展公式和 related answer 都在抛出 Error in lst[[idx]] : subscript out of bounds
这是我的尝试:
df1 <- as.data.frame(setNames(replicate(3,numeric(0), simplify = FALSE),
letters[1:3]))
lapply(1:10, function(n){
lst[n] %>%
data.frame() %>%
summarize_all(mean) %>%
rbind(df1, lst[n])
})
df1 %>% summarize_all(mean)
我怎样才能得到我想要的?
【问题讨论】:
-
输出应该是什么样的?如果要汇总所有值,可以通过
bind_rows之类的方式堆叠数据集,然后使用summarize_all。如果您想取每个数据集的平均值,然后取这些平均值的平均值(如果事情不平衡),您可以使用 purrr 中的map_df进行每个数据集内的初始循环平均然后在输出上使用summarize_all。 -
谢谢,再次抛出这个奇怪的错误,但@andrew-gustar 的回答带来了解决方案。