Я проанализировал текущие данные (ecd c .europa.eu / ru / публикации-данные / download-todays-data-geographi c -distribution-covid-19-падеж-по всему миру) из Европейского центра Профилактика и контроль заболеваний, которые отслеживают случаи COVID-19 по месяцам и странам. Таким образом, я хотел бы получить представление о распространении активных случаев, а также о том, как они связаны со смертями, связанными с заболеванием. Моя цель: создать переменную, в которой будет храниться процентная доля смертей от общего числа инфекций за каждый день в марте, разделенная на страны.
Вот мой код:
library(readxl)
d <- read_excel("C:/Users/hanna/Downloads/COVID-19-geographic-disbtribution-worldwide.xlsx")
#View(d)
corona_de <- d %>% filter(`Countries and territories` == "Germany" & Month == 3)
# explore the data
library(skimr)
skim(corona_de)
library(ggplot2)
ggplot(corona_de, aes (x = Day, y = Cases)) +
geom_line(color = "red")+ theme_classic()
# deutschland, england, spanien, italien, frankreich, österreich
corona <- d %>% filter(`Countries and territories` == "Germany" |
`Countries and territories` == "France" |
`Countries and territories` == "Italy" |
`Countries and territories` == "Spain") #filter for month later %>% filter(Month == 3)
#----------------------------------------------------------------
# Preprocess data and create cumulative and percent variables
#----------------------------------------------------------------
# format dates
library(lubridate)
corona$DateRep <-as.Date(corona$DateRep,"%Y-%m-%d UTC")
# store in list for later
dates <- corona_march$DateRep
# store countries list to loop through
countries <- unique(corona$`Countries and territories`)
#create empty objects
active_cases<- NULL
deaths_cum <- NULL
active_percent <- NULL
death_percent <- NULL
#loop through number of countries
for (c in 1:4){
current_country <- subset(corona_march, `Countries and territories` == countries[c])
# loop trhough days of march
for (i in 25:1){
# get new cases, deaths and population size for that day
current_interval = current_country %>% filter(DateRep >= dates[i])
current_case = current_interval %>% select(Cases)
current_death = current_interval %>% select(Deaths)
pop = current_country %>% filter(DateRep == dates[i]) %>% select(Pop_Data.2018)
# calculate cumulative cases, deaths and percent active
active_cum = sum(current_case$Cases)
percent_active = active_cum / pop[[1]]
cum_death = sum(current_death)
# avoid scientific notation
options("scipen"=100, "digits"=7)
percent_death = cum_death / pop[[1]]
# store variables in list
active_cases <- append(active_cases,active_cum)
deaths_cum <- append(deaths_cum,cum_death)
active_percent <- append(active_percent,percent_active)
percent_death <- append(death_percent, percent_death)
}
}
Удивительно, но все работает отлично, за исключением переменной %_датины. Для кумулятивных смертей вывод выглядит следующим образом:
deaths_cum
[1] 1098 1098 1098 1097 1096 1096 1093 1091 1090 1081 1070 1067 1052 1039 1021 1009 973
[18] 952 925 856 728 650 538 426 240 149 149 149 149 149 149 149 149 149
[35] 149 147 147 146 144 144 141 137 136 136 136 106 104 82 55 23 6799
[52] 6791 6785 6768 6740 6713 6672 6623 6587 6454 6356 6189 5993 5804 5552 5379 5009 4662
[69] 4315 3842 3413 2788 1993 1344 743 2696 2696 2696 2696 2696 2695 2693 2691 2691 2691
[86] 2668 2661 2649 2612 2575 2560 2408 2387 2205 2098 1929 1694 1370 976 514
Но для переменной процент_смерти кажется, что он останавливается после 1 итерации:
> percent_death
[1] 0.00001100083
Любой Идея, что случилось? Почему функция добавления работает для всех переменных, кроме небольших чисел? Есть ли более умный способ сделать это?