R - 嵌套聚合
R - nested aggregate
我有一个像这样的 table 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?不确定是否可能。我知道如何获得简单的聚合,但想知道是否有一种方法可以分两步(或更多步)分析数据
我们可以使用data.table
library(data.table)
setDT(df)[, list(P= mean(P)) , .(JB, Y)]
从表面上看,这是一个普通的 aggregate
问题,因此您有很多可用的工具。
在 base R 中,明显的候选者是 aggregate
。
aggregate(P ~ JB + Y, mydf, mean)
您也可以按照@eipi10 的建议使用 "dplyr" 包,如果您更喜欢这样的话:
library(dplyr)
mydf %>% group_by(JB, Y) %>% summarise(P = mean(P))
这是一个使用 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)]
.
我有一个像这样的 table 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?不确定是否可能。我知道如何获得简单的聚合,但想知道是否有一种方法可以分两步(或更多步)分析数据
我们可以使用data.table
library(data.table)
setDT(df)[, list(P= mean(P)) , .(JB, Y)]
从表面上看,这是一个普通的 aggregate
问题,因此您有很多可用的工具。
在 base R 中,明显的候选者是 aggregate
。
aggregate(P ~ JB + Y, mydf, mean)
您也可以按照@eipi10 的建议使用 "dplyr" 包,如果您更喜欢这样的话:
library(dplyr)
mydf %>% group_by(JB, Y) %>% summarise(P = mean(P))
这是一个使用 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)]
.