如何使用dplyr动态填写R中的列值(避免循环)

时间:2019-04-11 14:09:44

标签: r dplyr

我正在寻找一种方法,使用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))

1 个答案:

答案 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