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

R: using apply function on a list to get mean of multiple values

我有一个看起来像这样的列表。我将它按 'ID' 拆分,结果列表中有大约 1,400 个不同的部分(每个部分都是包含多个物种观察结果的不同位置)。

                   ID Species   2013       2008       2003
           AA 1501106      11   1751.047   1504.080   1580.337    
           AA 1501106      11   1856.224   1678.837   1592.824      
           AA 1502114      11   1766.527   1519.468   1647.180      

所以现在我知道我可以 select 单独的组件和 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 列,其中最后三列是您要计算平均值的列。

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

我们可以在 listlapply

循环后使用 colMeans
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)]