【发布时间】:2015-07-08 21:35:02
【问题描述】:
这与之前的 question 相关,在 data.table 上进行分组/查找,但有额外的输出。
我正在尝试对子集 .SD 执行分组并从每个子集中选择值。例如,在航班数据集中,我想找出:对于每个机场和月份,UniqueCarrier 和 Destination 的平均 ArrDelay 最差。所以基本上有2个级别的聚合。
我有如下的工作解决方案。但如果有更好的解决方案,最好了解一下。
library(data.table)
library(hflights)
DT <- as.data.table(hflights)
setkey(DT, Origin, Month)
#The solution code...
DT[, {
t1 <- .SD[, .(mean(na.omit(ArrDelay))) , by=UniqueCarrier];
max1 <- which.max(t1$V1);
t2 <- .SD[, .(mean(na.omit(ArrDelay))) , by=Dest];
max2 <- which.max(t2$V1);
list( MaxAvgDelayForCarrier = t1$UniqueCarrier[max1], MaxAvgDelayByCarrier = t1$V1[max1], MaxAvgDelayByDest= t2$Dest[max2], MaxAvgDelayForDest= t2$V1[max2] )
}, by = .(Origin, Month)]
# Checking for correctness
head(DT[ .("HOU", 1), .(MaxAvgDelayByCarrier=mean(na.omit(ArrDelay))), by=UniqueCarrier][order(-MaxAvgDelayByCarrier)],1)
head(DT[ .("IAH", 2), .(MaxAvgDelayForDest=mean(na.omit(ArrDelay))), by=Dest][order(-MaxAvgDelayForDest)],1)
【问题讨论】:
标签: r data.table