Аккуратные строки в одном фрейме данных на основе условия - PullRequest
1 голос
/ 23 апреля 2019

У меня вопрос по программированию на R.

У меня есть кадр данных в R со следующими данными:

Country         Year           Population        Bikes         Revenue
Austria          1970             85               NA            NA
Austria          1973             86               NA            NA
AUSTRIA          1970             NA               56           4567
AUSTRIA          1973             NA               54           4390

Я хочу обобщить эти данные, чтобы получить следующие новые данные:

Country             Year            Population         Bikes      Revenue
Austria             1970               85               56         4567
Austria             1973               86               54         4390

Таким образом, мне нужно исключить повторяющиеся годы для каждой страны и присоединить столбцы «Велосипеды и доходы» к конкретному году и стране.

Я был бы очень признателен, если бы вы могли помочь мне с этой проблемой.

Спасибо.

1 Ответ

4 голосов
/ 23 апреля 2019

Одна dplyr возможность может быть:

df %>%
 group_by(Country = toupper(Country), Year) %>%
 summarise_all(list(~ sum(.[!is.na(.)])))

  Country  Year Population Bikes Revenue
  <chr>   <int>      <int> <int>   <int>
1 AUSTRIA  1970         85    56    4567
2 AUSTRIA  1973         86    54    4390

Или комбинацией dplyr и tidyr:

df %>%
 group_by(Country = toupper(Country), Year) %>%
 fill(everything(), .direction = "up") %>%
 fill(everything(), .direction = "down") %>%
 distinct()

Или если вам по каким-либо причинам необходимо использоватьназвания стран начинаются с заглавной буквы:

df %>%
 mutate(Country = tolower(Country),
        Country = paste0(toupper(substr(Country, 1, 1)), substr(Country, 2, nchar(Country)))) %>%
 group_by(Country, Year) %>%
 summarise_all(list(~ sum(.[!is.na(.)])))

  Country  Year Population Bikes Revenue
  <chr>   <int>      <int> <int>   <int>
1 Austria  1970         85    56    4567
2 Austria  1973         86    54    4390
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...