#r #dataframe
#r #фрейм данных
Вопрос:
У меня есть вопрос по программированию на языке 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
Таким образом, мне нужно исключить повторяющиеся годы для каждой страны и объединить столбцы Bikes и Revenue с конкретным годом и страной.
Я был бы очень признателен, если бы вы могли помочь мне с этим вопросом.
Спасибо.
Ответ №1:
Одной 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
Комментарии:
1. Вау, это действительно сработало. Большое вам спасибо! Я высоко ценю!!
2. Да, все работает идеально. Я очень благодарен за все предоставленные вами варианты. Я очень ценю вашу помощь 🙂
3. Если вы считаете этот пост полезным, пожалуйста, примите его 🙂