R 汇总列表中数据帧的方式
我在一个列表中有一些数据帧,它们都具有相同的结构——在本例中是变量a、b和c。现在我想总结一下列表中的值的平均值R 汇总列表中数据帧的方式,r,dplyr,summarize,R,Dplyr,Summarize,我在一个列表中有一些数据帧,它们都具有相同的结构——在本例中是变量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(s
# 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)
})
因此,我想用汇总的输出创建一个新的数据帧,以便再次汇总它们,但这失败了,我的扩展公式和a都在lst[[idx]]:subscript越界中抛出了错误
以下是我的尝试:
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)
df1%
data.frame()%>%
汇总所有(平均值)%>%
rbind(df1,lst[n])
})
df1%>%汇总所有数据(平均值)
我怎样才能得到我想要的?你可以用purr
purrr::map_df(lst, function(df){summarize_all(df,mean)})
a b c
1 0.9917488 1.995821 3.121970
2 1.0007174 2.029938 2.962271
3 0.9582000 2.007167 3.046708
4 0.9745993 1.938877 3.015066
5 1.0050672 1.932359 3.052645
6 1.0196390 2.034723 2.998995
7 0.9717243 1.914532 3.024200
8 0.9954225 1.991664 2.981958
9 1.0148424 1.975775 2.949854
10 1.0014377 2.023839 2.976223
或者在基地R
t(sapply(lst,colMeans))
a b c
[1,] 0.9917488 1.995821 3.121970
[2,] 1.0007174 2.029938 2.962271
[3,] 0.9582000 2.007167 3.046708
[4,] 0.9745993 1.938877 3.015066
[5,] 1.0050672 1.932359 3.052645
[6,] 1.0196390 2.034723 2.998995
[7,] 0.9717243 1.914532 3.024200
[8,] 0.9954225 1.991664 2.981958
[9,] 1.0148424 1.975775 2.949854
[10,] 1.0014377 2.023839 2.976223
您可以使用purrr
purrr::map_df(lst, function(df){summarize_all(df,mean)})
a b c
1 0.9917488 1.995821 3.121970
2 1.0007174 2.029938 2.962271
3 0.9582000 2.007167 3.046708
4 0.9745993 1.938877 3.015066
5 1.0050672 1.932359 3.052645
6 1.0196390 2.034723 2.998995
7 0.9717243 1.914532 3.024200
8 0.9954225 1.991664 2.981958
9 1.0148424 1.975775 2.949854
10 1.0014377 2.023839 2.976223
或者在基地R
t(sapply(lst,colMeans))
a b c
[1,] 0.9917488 1.995821 3.121970
[2,] 1.0007174 2.029938 2.962271
[3,] 0.9582000 2.007167 3.046708
[4,] 0.9745993 1.938877 3.015066
[5,] 1.0050672 1.932359 3.052645
[6,] 1.0196390 2.034723 2.998995
[7,] 0.9717243 1.914532 3.024200
[8,] 0.9954225 1.991664 2.981958
[9,] 1.0148424 1.975775 2.949854
[10,] 1.0014377 2.023839 2.976223
输出应该是什么样子?如果要对所有值进行汇总,可以通过bind_rows
之类的方式对数据集进行堆栈,然后使用summary_all
。如果您想取每个数据集的平均值,然后取这些平均值的平均值(如果事情不平衡),您可以使用purrr中的map_df
对每个数据集进行初始循环平均,然后在输出上使用summary_all
。谢谢,再次抛出这个奇怪的错误,但是来自@andrew gustar的答案带来了解决方案。输出应该是什么样的?如果要对所有值进行汇总,可以通过bind_rows
之类的方式对数据集进行堆栈,然后使用summary_all
。如果您想取每个数据集的平均值,然后取这些平均值的平均值(如果事情不平衡),您可以使用purrr中的map_df
对每个数据集进行初始循环平均,然后在输出上使用summary_all
。谢谢,再次抛出这个奇怪的错误,但是来自@andrew gustar的答案带来了解决方案。我只需要总结一下所有的(意思)
那么这正是我想要的。很好的回答,谢谢!。。。分别是t(colMeans(df))
。或者如果不需要中间结果,只使用rowMeans(sappy(lst,colMeans))
。您是否也使用rowMeans(sappy(lst,colSd))
来获得总的SD?(通过使用nice公式)不,SD不是那样工作的,部分原因是它不是线性的(即均方偏差的平方根),部分原因是该平均值的每个分量将基于每个子样本的平均值,而不是总体平均值。如果您想要按列计算总体sd,则需要将dfs绑定在一起,然后使用sd-类似于sapply(do.call(rbind,lst),sd)
(或者在这里用mean
替换sd
,以获得与上述相同的总体平均值)。我只需要总结所有(mean)
,这正是我想要的。很好的回答,谢谢!。。。分别是t(colMeans(df))
。或者如果不需要中间结果,只使用rowMeans(sappy(lst,colMeans))
。您是否也使用rowMeans(sappy(lst,colSd))
来获得总的SD?(通过使用nice公式)不,SD不是那样工作的,部分原因是它不是线性的(即均方偏差的平方根),部分原因是该平均值的每个分量将基于每个子样本的平均值,而不是总体平均值。如果您希望按列计算总体sd,则需要将dfs绑定在一起,然后使用sd-类似于sappy(do.call(rbind,lst),sd)
(或者将sd
替换为mean
,以获得与上述相同的总体平均值)。