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