问题描述
我无法解释为什么,但是当我尝试pivot_wider
数据集时,除第一个国家以外的每个国家都突然失去了所有值。
corona_data <- read_csv("https://raw.githubusercontent.com/datasets/covid-19/master/data/time-series-19-covid-combined.csv")
glimpse(corona_data)
corona_data_tidy1 <- corona_data %>%
pivot_longer(-c(`Country/Region`,Date,Lat,Long,`Province/State`),names_to = "Name",values_to = "values")
corona_data_tidy1
corona_data_tidy2 <- corona_data_tidy1 %>%
mutate(row = row_number()) %>%
pivot_wider(names_from = `Country/Region`,values_from = values) %>%
select(-row)
corona_data_tidy2
解决方法
您的代码中有两个错误。
首先,read_csv
返回一些警告。
Province/State
被读为logical
,而不是character
。这是因为前1000行丢失了。因此,您应该告诉read_csv
如何正确读取数据。
与您的问题有关的问题是,一行不是仅由Country/Region
定义,而是由Country/Region
和Province/State
定义。还分别为每对Country/Region
和Province/State
标识了纬度和经度。
因此,如果要保留这些信息,则需要在数据透视表中全部使用它们。
看看这个工作示例:
library(readr)
library(tidyr)
library(dplyr)
corona_data <- readr::read_csv("https://raw.githubusercontent.com/datasets/covid-19/master/data/time-series-19-covid-combined.csv",col_types = cols(
Date = col_date(format = ""),`Country/Region` = col_character(),`Province/State` = col_character(),Lat = col_double(),Long = col_double(),Confirmed = col_double(),Recovered = col_double(),Deaths = col_double()))
glimpse(corona_data)
corona_data_tidy1 <- corona_data %>%
pivot_longer(c(Confirmed,Recovered,Deaths),names_to = "Name",values_to = "values")
corona_data_tidy2 <- corona_data_tidy1 %>%
pivot_wider(names_from = c(`Country/Region`,`Province/State`,Lat,Long),values_from = values)