【发布时间】:2018-10-29 18:18:48
【问题描述】:
我在下面有一个数据集:
head(weather_data)
dmanum DATE Avg_precipitation Avg_TAVG
<chr> <date> <dbl> <dbl>
1 501 2017-01-01 0.000976 45.3
2 501 2017-01-02 NA 39.3
3 501 2017-01-03 0.366 42
4 502 2017-01-01 NA 46
5 502 2017-01-02 NA 33.3
6 502 2017-01-03 NA 31.3
7 503 2017-01-01 5 46
8 503 2017-01-02 10 33.3
9 503 2017-01-03 15 31.3
dmanum 有许多具有相同日期的值。根据我对 dmanum 的选择,我想按周取平均值 Avg_precipitation 并替换该特定 DMA 的 NA。
例如,如果我要使用这个数据集,我会尝试这样的事情,但我得到一个错误:
weather_data1<- weather_data %>%
group_by(DATE) %>%
filter(., dmanum==502) %>%
mutate_at(Avg_precipitation = na.fill(mean(Avg_precipitatation))
预期的输出是这样的:
dmanum DATE Avg_precipitation Avg_TAVG
<chr> <date> <dbl> <dbl>
1 501 2017-01-01 0.000976 45.3
2 501 2017-01-02 NA 39.3
3 501 2017-01-03 0.366 42
4 502 2017-01-01 2.5004 46
5 502 2017-01-02 10 33.3
6 502 2017-01-03 7.683 31.3
7 503 2017-01-01 5 46
8 503 2017-01-02 10 33.3
9 503 2017-01-03 15 31.3
【问题讨论】:
-
不清楚你为什么
filtering -
对于上下文,有一些 dmanum 值包含所有 NA for Avg。沉淀。我想根据整个数据集用每周平均降水量替换那些。对于确实有一些值的 dma,我稍后将使用 na.fill 将这些值替换为移动平均线
-
你需要
df1 %>% group_by(DATE) %>% mutate(Avg_precipitation = replace(Avg_precipitation, is.na(Avg_precipitation), mean(Avg_precipitation, na.rm = TRUE))) -
我还没有尝试过你的代码,但看起来不错!我需要的唯一补充是能够通过特定的 dmanum 值进行过滤。在此示例中,它将是 dmanum==502
-
我不想用这个逻辑替换数据集中的每个 NA,我只想替换所选 dma(s) 的 NA