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

标签 r list dataframe

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

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

unlist()

您能否举例说明如何计算,例如像我这样的数据结构的意思。 包含多个数据框的列表,其中包含多个列。

更新: 对于造成的困惑,我深表歉意。我想要所有数据框中特定列的总均值。 感谢 Thomas 提供了一个工作解决方案来计算所有数据框中特定列的总均值,并感谢 psychometriko 提供了一个有用的解决方案来计算所有数据框中所有列的均值(甚至在不涉及数字数据的情况下) .

谢谢!

最佳答案

这是您要找的吗?

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 在他的回答中所提到的,只是在由上述 do.call 产生的 data.frame 的每个组件(列)上调用函数 mean > 功能。

编辑:针对如何处理非数字 data.frame 组件的问题,下面的解决方案诚然不是很优雅,我确信存在更好的解决方案,但这里是我首先想到的是:

set.seed(42)
mylist <- list(a=data.frame(rand=rnorm(10),
                            lets=sample(LETTERS,10,replace=TRUE)),
               b=data.frame(rand=rnorm(10),
                            lets=sample(LETTERS,10,replace=TRUE)),
               c=data.frame(rand=rnorm(10),
                            lets=sample(LETTERS,10,replace=TRUE)))
sapply(do.call("rbind",mylist),function(x) {
  if (is.numeric(x)) mean(x)
})

$rand
[1] -0.02470602

$lets
NULL

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

关于r - 计算例如具有多列 data.frames 的列表中的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17146523/

相关文章:

r - 粘贴数据框而不更改为因子水平

python-3.x - 获取 pandas 数据框中两个给定日期之间的月份的结束日期

python - 从另一个数据框中计算 nunique

r - 将 R 中选定的列转置为行

r - 如何计算值在数据帧的列中出现的次数?

jquery - 根据选择显示一个 div

python - 如何访问列表中的最后一项?(python)

r - 如何使用pandoc将目录添加到R Markdown HTML文件中?

r - 完全结束 RSelenium session 的正确方法?

java - 是否可以使用 forEach() 方法将列表中的所有字符串替换为其等效的大写字母?