保留数据框中不符合特定条件的值

时间:2016-05-14 12:22:14

标签: r dplyr

我有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以上没有天数,因此这个月被从输出文件中删除了。我希望它被包括为零,即使它不符合我在公式中设置的标准。可以这样做吗?

我希望这是有道理的。

2 个答案:

答案 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)),]