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 的向量。
我们可以在 list
和 lapply
循环后使用 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)]
我有一个看起来像这样的列表。我将它按 '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 的向量。
我们可以在 list
和 lapply
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)]