Как динамически заполнить значения столбца (избегая циклов) в R с помощью dplyr - PullRequest
0 голосов
/ 11 апреля 2019

Я ищу способ динамически заполнять значения NA в столбцах значением в предыдущем столбце, используя dplyr и избегая циклов.

Я работаю над данными по инфляции для этой проблемы, и у меня естьпредоставил фиктивный набор данных (см. ниже), представляющий собой небольшой поднабор данных, которые у меня есть.

Я пытался использовать 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 Ответ

6 голосов
/ 11 апреля 2019

Что-то вроде:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...