我有一个像这样的表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?不确定是否可能。我知道如何获得简单的聚合,但想知道是否有办法在两个(或更多步骤)中分析数据
答案 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)]
。