我正在寻找一种方法,使用dplyr并避免循环,从而用前一列中的值动态填充列中的NA值。
我正在处理此问题的通货膨胀数据,并且提供了一个虚拟数据集(请参阅下文),这是我拥有的数据的一小部分子集。
我尝试使用mutate_at()
,但是不确定如何获取函数参数以返回到上一专栏。
dummy_data = tibble(Country = c("UK", "USA", "Canada", "France"),
`2020` = c(0.02, 0.03, 0.03, 0),
`2021` = c(0.03, 0.03, NA, NA),
`2022` = c(NA, 0.04, NA, NA))
预期结果是,在各个国家/地区的基础上,NA值将替换为上一年的值。我知道可以使用循环来实现,但是理想情况下,我希望将其保持在整洁的管道格式中。
result = tibble(Country = c("UK", "USA", "Canada", "France"),
`2020` = c(0.02, 0.03, 0.03, 0),
`2021` = c(0.03, 0.03, 0.03, 0),
`2022` = c(0.03, 0.04, 0.03, 0))
答案 0 :(得分:6)
类似的东西:
dummy_data = tibble(Country = c("UK", "USA", "Canada", "France"),
`2020` = c(0.02, 0.03, 0.03, 0),
`2021` = c(0.03, 0.03, NA, NA),
`2022` = c(NA, 0.04, NA, NA))
res <- dummy_data %>% gather(year, value, -Country) %>%
group_by(Country) %>% fill(value) %>%
spread(year, value)
#####
# A tibble: 4 x 4
# Groups: Country [4]
Country `2020` `2021` `2022`
<chr> <dbl> <dbl> <dbl>
1 Canada 0.03 0.03 0.03
2 France 0 0 0
3 UK 0.02 0.03 0.03
4 USA 0.03 0.03 0.04