пропорционально числа из двух разных фреймов данных? - PullRequest
0 голосов
/ 05 мая 2020
    df <- read.csv ('https://raw.githubusercontent.com/ulklc/covid19- 
    timeseries/master/countryReport/raw/rawReport.csv',
            stringsAsFactors = FALSE)
    yesterday <- function() Sys.Date() - 1L
     yesterday()
 df1 <- aggregate(death ~ countryName, subset(df, day == yesterday()),sum)
 df8 <- read.csv 
 ('https://raw.githubusercontent.com/hirenvadher954/Worldometers- 
 Scraping/master/countries.csv',
             stringsAsFactors = FALSE)

df8 также содержит информацию о населении. df1 - количество смертей. это Как мне соотносить числа?

как результат

коэффициент смертности населения страны

германия 84 300254589 28/100084863

Ответы [ 2 ]

0 голосов
/ 16 мая 2020

Вот полное рабочее решение с использованием dplyr, которое включает следующие операции.

  1. Замените aggregate() простым filter() на максимальное значение day, потому что данные уже структурирован как одна строка для каждой страны в день,
  2. Удалите повторяющиеся строки в данных о населении с помощью distinct(),
  3. Удалите запятые из данных о населении с помощью 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"             
> 
0 голосов
/ 05 мая 2020

df8 csv имеет много строк с похожими значениями. Следовательно, необходимо извлечь уникальные значения.

df8 <- unique(df8)

df1$population <- df8$population[match(df1$countryName, df8$country_name)]
df1$population <- as.numeric(gsub(",","",df1$population))

df1$deathrate <- df1$death/df1$population

Если вы хотите удалить популяцию из df1

df1 <- df1[-3]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...