dplyr неправильно группирует или использует данные из предыдущих групп - PullRequest
1 голос
/ 22 марта 2020

Я работаю с данными JHU по коронавирусным инфекциям и пытаюсь вычислить новые случаи (и случаи смерти) по группам. Вот код:

base <- "https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_19-covid-"
world.confirmed <- read.csv(paste0(base,"Confirmed.csv"), sep=',', head=T)
world.confirmed <- gather( world.confirmed, Date, Cases, X1.22.20:X3.21.20)

world.deaths <- read.csv(paste0(base,"Deaths.csv"), sep=',', head=T)
world.deaths <- gather(world.deaths, Date, Deaths, X1.22.20:X3.21.20)

world.data <- merge(world.confirmed, world.deaths, 
                 by=c("Province.State","Country.Region","Lat", "Long", "Date"))

world.data$Date <- as.Date(world.data$Date, "X%m.%d.%y")
world.data <- world.data %>% 
    group_by(Province.State,Country.Region,Date) %>%
    arrange(Province.State, Country.Region, as.Date(Date))

После решения этого вопроса в SO Я пытался вычислить различия по группам, используя что-то вроде этого:

world.data <- world.data %>% 
   group_by(Lat,Long) %>% 
   mutate(New.Cases = Cases - lag(Cases))

Это не работа, однако; любая другая группировка тоже не имеет. Вот результаты на границе между двумя первыми странами:

Value for first element of Albania

Я попытался также вставить фазу arrange и даже попытаться обнулить первую элемент группы. Та же проблема. Есть идеи?

Обновление Я использую R 3.4.4 и dplyr_0.8.5

1 Ответ

1 голос
/ 22 марта 2020

Вероятно, это может помочь:

library(dplyr)

world.data %>%
  mutate(Date = as.Date(Date, "X%m.%d.%y")) %>% 
  arrange(Country.Region, Lat, Long, Date) %>%
  group_by(Country.Region, Lat, Long) %>%
  mutate(New_Cases = Cases - lag(Cases), 
         New_deaths = Deaths - lag(Deaths)) 

Мы arrange данных в соответствии с Date и находим New_Cases, вычитая сегодняшний случай из вчерашнего случая для каждого Country и того же для смерти.

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