【发布时间】:2017-03-14 14:56:36
【问题描述】:
我的数据如下:
Week_ID County State date ZCTA T_mean_F Precipitation holiday Units
523 Carroll Iowa 01/01/2010 51401 5.669194 0 1 0
523 Carroll Iowa 01/01/2010 51430 5.757368 0 1 0
523 Carroll Iowa 01/01/2010 51436 5.355239 0 1 0
523 Carroll Iowa 01/01/2010 51440 6.055060 0 1 0
523 Carroll Iowa 01/01/2010 51443 5.806877 0 1 0
523 Carroll Iowa 01/01/2010 51444 5.995150 0 1 0
523 Carroll Iowa 01/01/2010 51451 5.003030 0 1 0
523 Carroll Iowa 01/01/2010 51455 6.342612 0 1 0
523 Carroll Iowa 01/01/2010 51459 5.500786 0 1 0
523 Carroll Iowa 01/01/2010 51463 6.303967 0 1 0
这只是前 10 行。整个数据集有许多不同的 Week_ID 和 ZCTA。
我想做的是通过 ZCTA 和 Week_ID 取“T_mean_F”和“降水”的平均值以及“单位”的总和,最好是一次调用。最终结果看起来像这样(只是一个例子,不是实际输出):
Week_ID ZCTA T_mean_avg Prep_avg Units
523 51401 5.669194 2 10
524 51401 5.757368 3 12
525 51401 5.355239 7 14
这是我尝试过的:
Rollup = Wthr_UMW_dwu[,.(T_mean_avg = mean(T_mean_F),Prep_avg = mean(Precipitaton), Units=sum(Units)), by=.(ZCTA,Week_ID)]
和
Rollup_1<- aggregate(cbind(T_mean_F,Precipitation,Units) ~ ZCTA + Week_ID, data=Wthr_UMW_dwu, FUN = function(x) c(mn=mean(x), MN=mean(x), n = sum(x)))
这两个问题都是我根据之前关于该主题的问题建模的,并且都会产生错误。
任何人都知道一种流畅/优雅的方式来实现这一目标?
谢谢, -基思
【问题讨论】:
-
您是否加载了
library(data.table),因为第一个看起来应该可以工作。同时转换为data.table,即setDT(Wthr_UMW_dwu)[, .(T_mean_avg = mean(T_mean_F),Prep_avg = mean(Precipitation), Units=sum(Units)), by=.(ZCTA,Week_ID)]检查Precipitation的拼写。 -
将您的数据提供为可重现的代码,而不是它的打印输出。如果您正在使用它,也请使用
data.table标签。 -
您似乎不想汇总而只是聚合,因为
by分组是按单个字符向量进行分组(单个分组粒度)。 Rollup 旨在聚合各种分组粒度,通常是层次结构中的级别,即list("ZCTA", c("ZCTA","Week_ID"))。如果您要添加预期的输出,读者会更清楚您想要实现的目标。 -
dplyr 包中的 group_by 和 summarise 会不起作用吗?
Wthr_UMW_dwu%>%group_by(ZCTA,Week_ID)%>%summarise(mean(T_mean_F),Prep_avg=mean(Precipitation)... -
因为您在
data.frame上使用data.table方法。将其转换为data.table,它应该可以工作
标签: r function aggregate rollup summarize