Вот полное рабочее решение с использованием dplyr
, которое включает следующие операции.
- Замените
aggregate()
простым filter()
на максимальное значение day
, потому что данные уже структурирован как одна строка для каждой страны в день, - Удалите повторяющиеся строки в данных о населении с помощью
distinct()
, - Удалите запятые из данных о населении с помощью
mutate()
и gsub()
.
Сначала мы прочитаем данные, используя код из исходного сообщения.
df <- read.csv ('https://raw.githubusercontent.com/ulklc/covid19-timeseries/master/countryReport/raw/rawReport.csv',
stringsAsFactors = FALSE)
df8 <- read.csv ('https://raw.githubusercontent.com/hirenvadher954/Worldometers-Scraping/master/countries.csv',
stringsAsFactors = FALSE)
Затем мы загружаем dplyr
, очищаем данные, присоединяемся и вычисляем коэффициенты смертности на 1000 населения.
library(dplyr)
df8 %>% distinct(.) %>%
rename(countryName = country_name) %>%
mutate(population = as.numeric(gsub(",","",population))) -> df8
df %>% filter(day == max(day)) %>%
inner_join(df8) %>%
mutate(deathRate = (death / population * 1000)) -> deathRateDf
head(deathRateDf[,c("countryName","death","population","deathRate")])
... и вывод:
> head(deathRateDf[,c("countryName","death","population","deathRate")])
countryName death population deathRate
1 Andorra 49 77142 0.635192243
2 United Arab Emirates 208 9890402 0.021030490
3 Afghanistan 136 38928346 0.003493598
4 Antigua and Barbuda 3 97929 0.030634439
5 Anguilla 0 14869 0.000000000
6 Albania 31 2877797 0.010772129
>
ПРИМЕЧАНИЕ: есть 38 стран, где данные о населении не совпадают с названием страны в covid-19 отчетные данные, предполагающие, что требуется дополнительная очистка данных.
# number of countries in pop data that didn't match to covid-19 data
nrow(df8) - nrow(deathRateDf)
df8$countryName[!df8$countryName %in% deathRateDf$countryName]
... и вывод:
> nrow(df8) - nrow(deathRateDf)
[1] 38
> df8$countryName[!df8$countryName %in% deathRateDf$countryName]
[1] "Holy See" "Niue" "Tokelau" "Nauru" "Saint Pierre & Miquelon" "Saint Helena"
[7] "Tuvalu" "Wallis & Futuna" "Cook Islands" "Palau" "Turks and Caicos" "Faeroe Islands"
[13] "Saint Kitts & Nevis" "American Samoa" "Northern Mariana Islands" "Marshall Islands" "Tonga" "U.S. Virgin Islands"
[19] "St. Vincent & Grenadines" "Micronesia" "Kiribati" "Samoa" "Guam" "Sao Tome & Principe"
[25] "Vanuatu" "Brunei " "Cabo Verde" "Solomon Islands" "Macao" "Comoros"
[31] "Lesotho" "Puerto Rico" "State of Palestine" "Congo" "Turkmenistan" "Czech Republic (Czechia)"
[37] "Côte d'Ivoire" "North Korea"
>