计算,例如具有多列data.frames的列表中的平均值

时间:2013-06-17 11:34:19

标签: r list dataframe

我有几个data.frames列表。每个data.frame都有几列。 通过使用     mean(mylist$first_dataframe$a 我可以在这一个data.frame中获得a的均值。 但是,我不知道如何计算存储在列表中的所有data.frames或特定data.frames的方法。

我可以使用循环,但有人告诉我     apply()及其变体更好 我尝试使用我通过搜索找到的几种解决方案但不知何故它只是不起作用。 我想我需要使用

unlist()

你能举例说明如何计算,例如像我这样的数据结构的意思。 包含多个包含多个列的data.frames的列表。

更新: 对不起,我很抱歉。我想要所有数据帧中特定列的宏观均值。 感谢Thomas为所有数据帧中的特定列提供了计算宏均值的工作解决方案,并为psychometriko提供了一个有用的解决方案,用于计算所有数据帧中所有列的均值(即使对于不涉及数值数据的情况) )。

谢谢!

2 个答案:

答案 0 :(得分:4)

这是你在找什么?

set.seed(42)
mylist <- list(a=data.frame(foo=rnorm(10),
                            bar=rnorm(10)),
               b=data.frame(foo=rnorm(10),
                            bar=rnorm(10)),
               c=data.frame(foo=rnorm(10),
                            bar=rnorm(10)))
sapply(do.call("rbind",mylist),mean)

       foo        bar 
 0.1163340 -0.1696556 

注意:do.call("rbind",mylist)会返回与您在unlist函数中提到的内容类似的内容,然后是sapply,正如Roland在他的回答中所提到的,只是调用函数{ {1}}在由上述mean函数生成的data.frame的每个组件(列)上。{/ p>

编辑:针对如何处理非数字data.frame组件的问题,以下解决方案当然不是很优雅,我相信存在更好的,但这里是我能想到的第一件事是:

do.call

这基本上只是创建一个自定义函数,首先测试每个组件是否为数字,如果是,则返回均值。如果不是,它会跳过它。

答案 1 :(得分:2)

整个do.call('rbind', List)事情可能很慢并容易发生意外。如果只有一列你需要平均值,最好的方法是:

mean(sapply(mylist, function(X) X$rand))

它比do.call方法快了约10倍。