【问题标题】:Retain values in dataframe that do not meet certain conditions保留数据框中不满足某些条件的值
【发布时间】:2016-09-10 15:08:54
【问题描述】:

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

我希望这是有道理的。

【问题讨论】:

标签: r dplyr


【解决方案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 值不 > 0.2mm 的月份将被包含为 NaN。您可以轻松地将它们转换为零。

【讨论】:

    【解决方案2】:

    考虑行绑定过滤聚合:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多