我有一个数据集如下:
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 发布于 2018-10-29 18:28:32
我们可以在replace之后使用group_by。而不是对行进行filter,而是在replace的list参数中指定逻辑,只替换'dmanum‘为502的NA。
library(tidyverse)
weather_data %>%
group_by(DATE) %>%
mutate(Avg_precipitation = replace(Avg_precipitation,
is.na(Avg_precipitation) & dmanum == 502,
mean(Avg_precipitation, na.rm = TRUE)))
# A tibble: 9 x 4
# Groups: DATE [3]
# dmanum DATE Avg_precipitation Avg_TAVG
# <int> <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.50 46
#5 502 2017-01-02 10 33.3
#6 502 2017-01-03 7.68 31.3
#7 503 2017-01-01 5 46
#8 503 2017-01-02 10 33.3
#9 503 2017-01-03 15 31.3https://stackoverflow.com/questions/53051563
复制相似问题