【问题标题】:Nesting a SUM and a MEAN in an aggregate to get means of scores per group将 SUM 和 MEAN 嵌套在聚合中以获得每组得分的平均值
【发布时间】:2016-09-28 21:11:26
【问题描述】:

我找不到与我的问题相似的数据集,因此我将数据集 Iris(R 中的数据集)更改为看起来相似 - 它已经足够接近了!

data = iris
data$type = gl(5,30,150,labels=c("group1","group2","group3","group4","group5"))
data$ID = gl(30,5,150)

然后我用下面的代码

xtabs(Sepal.Length ~ Species + type, aggregate(Sepal.Length ~ Species + type + ID, data, mean))

导致

type
Species      group1 group2 group3 group4 group5
  setosa      30.16  19.90   0.00   0.00   0.00
  versicolor   0.00  12.20  35.88  11.28   0.00
  virginica    0.00   0.00   0.00  26.24  39.64

我的理解是,我的代码所做的是将每个 ID 的 Sepal.Length 相加,然后按每个 Species 和类型取这些值的平均值。

这对吗?

如果没有,我怎么会得到这个?

另外,如果我的数据是这样的,每个 ID 都有多种类型,我将如何得到这个? (不知道如何在 R 中构造它)

其实只是说清楚

我想要的是一个代码,它将每个 ID 和类型的 Sepal.Length 相加,然后它将对所有 ID 取这些总和的平均值,并按类型和物种发布平均 Sepal.Length/

【问题讨论】:

    标签: r aggregate summary


    【解决方案1】:

    data.table:

    library(data.table)
    setDT(data)
    
    #sum of Sepal.Length for each ID AND type
    data[, id_type_sum := sum(Sepal.Length), by = .(ID, type)]
    
    # mean of this variable by type and species
    data[, mean(id_type_sum), by = .(type, Species)]
    
    #   type    Species       V1
    # 1: group1     setosa 25.13333
    # 2: group2     setosa 24.87500
    # 3: group2 versicolor 30.50000
    # 4: group3 versicolor 29.90000
    # 5: group4 versicolor 28.20000
    # 6: group4  virginica 32.80000
    # 7: group5  virginica 33.03333
    

    如果你想要这个表格格式,你可以使用data.tabledcast方法:

    library(magrittr) # for the %>% operator
    data[, mean(id_type_sum), by = .(type, Species)] %>%
      dcast(Species ~ type)
    

    结果:

          Species   group1 group2 group3 group4   group5
    1:     setosa 25.13333 24.875     NA     NA       NA
    2: versicolor       NA 30.500   29.9   28.2       NA
    3:  virginica       NA     NA     NA   32.8 33.03333
    

    【讨论】:

    • 我在我的实际数据上使用了这个代码,数字看起来像我预期的那样!非常感谢,太好了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-23
    • 2017-12-11
    • 2020-08-30
    • 1970-01-01
    • 2011-03-01
    • 2023-01-13
    相关资源
    最近更新 更多