【问题标题】:R: using apply function on a list to get mean of multiple valuesR:在列表上使用应用函数来获取多个值的平均值
【发布时间】:2016-11-22 15:39:10
【问题描述】:

我有一个看起来像这样的列表。我将它按“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      

所以现在我知道我可以选择单个组件,summary() 将为我提供 2013 年、2008 年和 2003 年每个特定元素的平均值、中位数等,但是有这么多组件让人难以分类

我想要的是能够获得每个组件每年的平均值(因此是 2013 年、2008 年和 2003 年的平均值)

使用

apply(plot_list,mean)

不起作用,大概是因为列表不只是一列。

关于如何解决这个问题的任何想法?

【问题讨论】:

  • 您显示的数据结构看起来更像 data.frame 然后列表。你有这些数据框的列表吗?如果是这种情况,您可以编写自己的结构函数计算方法,然后在函数中使用 apply(或 lapply,如果它在列表中)...

标签: r apply mean


【解决方案1】:

我们可以在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)]

【讨论】:

    【解决方案2】:

    下面的呢:

    lapply(myList, FUN=function(i) sapply(i[, 3:5], mean))
    

    这假设您的列表(我称为 myList)是具有相同结构的 data.frame 列表:5 列,其中最后三列是您要计算平均值的列。

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

    【讨论】:

    • 这非常有效!它没有点击我有一个data.frames列表。非常感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-08
    相关资源
    最近更新 更多