我有1880 - 2011年的每日降水数据。数据位于名为STATION的df中,采用以下形式:
STATION: 47486 obs. of 4 variables
Year: int 1880 1880 ...
Month: int 1 1 1 ...
Day: int 1 2 3 ...
PPT: num 0.4 0 0 ...
当日降水量超过0.2毫米时,我使用以下数据将数据分组为月平均降水量:
MONTHLY.MEAN=STATION %>% group_by(Year,Month) %>%
filter(PPT>=0.2)%>%summarise(s = mean(PPT))
这样可以正常工作,但是在记录中有一个月(2007年4月),在0.2mm以上没有天数,因此这个月被从输出文件中删除了。我希望它被包括为零,即使它不符合我在公式中设置的标准。可以这样做吗?
我希望这是有道理的。
答案 0 :(得分:1)
使用dplyr:
MONTHLY.MEAN=STATION %>% group_by(Year,Month) %>%summarise(s = mean(PPT[PPT>=0.2]))
使用data.table的可能解决方案:
library(data.table)
setDT(STATION)
STATION[,mean(PPT[PPT >= 0.2]),by=c('Month','Year')]
在这两个代码中,没有PPT值的月份> NaN将包括0.2mm。您可以轻松地将它们转换为零。
答案 1 :(得分:0)
考虑行绑定过滤的聚合:
MONTHLY.MEAN <- rbind(
STATION %>% group_by(Year,Month) %>%
filter(PPT>=0.2) %>% summarise(s = mean(PPT)),
STATION %>% group_by(Year,Month) %>%
filter(max(PPT)<0.2) %>% summarise(s = 0)
)
# RE-ORDER DATA FRAME
MONTHLY.MEAN <- MONTHLY.MEAN[with(MONTHLY.MEAN, order(Year, Month)),]