R - 嵌套聚合

时间:2016-01-02 17:07:29

标签: r aggregate

我有一个像这样的表d1(三列,JB Y和P)

JB  Y   P
AA  11  1
BB  11  2
AA  12  3
BB  12  4
AA  13  3
CC  12  4
CC  13  2
DD  11  1
DD  12  1
DD  13  3
BB  12  3

我想要做的是获得嵌套聚合。我的意思是结果应该是这样的:

JB  Y   Avergare (P)
AA  11  1
AA  12  2
AA  13  3
BB  11  2
BB  12  3.5
CC  12  4
CC  13  2
DD  11  1
DD  12  1
DD  13  3

嵌套聚合首先使用Y和JB进行聚合并提供平均P?不确定是否可能。我知道如何获得简单的聚合,但想知道是否有办法在两个(或更多步骤)中分析数据

3 个答案:

答案 0 :(得分:0)

我们可以使用"ABC : MNT+232421:1' MNT+39191: hks"

data.table

答案 1 :(得分:0)

从外观上看,这是一个香草aggregate问题,所以你有很多可用的工具。

在基地R中,明显的候选人是aggregate

aggregate(P ~ JB + Y, mydf, mean)

如果更符合您的风格,您也可以使用@ eipi10建议的“dplyr”软件包:

library(dplyr)
mydf %>% group_by(JB, Y) %>% summarise(P = mean(P))

答案 2 :(得分:0)

以下是使用data.table的解决方案:

library(data.table)

dt <- data.table(
    JB = c("AA", "BB", "AA", "BB", "AA", "CC", "CC", "DD", "DD", "DD", "BB"),
    Y = c(11, 11, 12, 12, 13, 12, 13, 11, 12, 13, 12),
    P = c(1, 2, 3, 4, 3, 4, 2, 1, 1, 3, 3))

dt[order(JB), .(avg = mean(P)), by = .(JB, Y)]

中间的.()用于命名聚合结果。如果没有必要进行排序,您可以省略第一部分,例如只是打电话 dt[, .(avg = mean(P)), by = .(JB, Y)]