R:在列表上使用apply函数获取多个值的平均值

R:在列表上使用apply函数获取多个值的平均值,r,apply,mean,R,Apply,Mean,我有一张这样的清单。我将其按“ID”进行了拆分,得到了列表中大约1400个不同的部分(每个部分都是包含多个物种观察结果的不同位置) 现在我知道我可以选择单个组件,summary()将给出2013年、2008年和2003年每个特定元素的平均值、中位数等,但由于有太多组件,排序变得很混乱 我想要的是能够得到每年每个组成部分的平均值(2013年、2008年和2003年的平均值) 使用 apply(plot_list,mean) 不起作用,可能是因为列表不仅仅是一列 关于如何解决这个问题,有什么想法吗

我有一张这样的清单。我将其按“ID”进行了拆分,得到了列表中大约1400个不同的部分(每个部分都是包含多个物种观察结果的不同位置)

现在我知道我可以选择单个组件,summary()将给出2013年、2008年和2003年每个特定元素的平均值、中位数等,但由于有太多组件,排序变得很混乱

我想要的是能够得到每年每个组成部分的平均值(2013年、2008年和2003年的平均值)

使用

apply(plot_list,mean)
不起作用,可能是因为列表不仅仅是一列


关于如何解决这个问题,有什么想法吗?

下面是什么

lapply(myList, FUN=function(i) sapply(i[, 3:5], mean))
这假设您的列表(我称之为myList)是一个data.frames列表,具有相同的结构:5列,其中最后三列是要计算平均值的列


这将返回一个列表,其中每个元素都是长度为3的向量。

我们可以使用
colMeans
列表中循环后使用
lappy

lapply(myList, function(x) colMeans(x[3:5]))

但是,更好的方法可能是使用
dplyr

library(dplyr)
bind_rows(myList) %>%
           group_by(ID, Species) %>%
           summarise_each(funs(mean))
data.table
方法

library(data.table)
rbindlist(myList)[, lapply(.SD, mean), by = .(ID, Species)]

显示的数据结构看起来更像data.frame,然后是list。你有这些数据帧的列表吗?如果是这样的话,您可以编写自己的结构函数计算方法,然后使用apply(或者lappy,如果它在列表中的话)处理您的函数……这已经非常有效了!它没有点击我有一个data.frames列表。非常感谢你的帮助
library(data.table)
rbindlist(myList)[, lapply(.SD, mean), by = .(ID, Species)]