使用数据透视功能后数据集中缺少值?

问题描述

我无法解释为什么,但是当我尝试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/RegionProvince/State定义。还分别为每对Country/RegionProvince/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)