[英]How can I convert this dataframe into a multiple time series object in R?
我正在嘗試清理有關 COVID19 新型冠狀病毒的一些數據( https://github.com/CSSEGISandData/COVID-19/blob/master/csse_covid_19_data/csse_covid_19_time_series/time_series_19-covid-Confirmed.csv )以執行各種類型的分析(即,創建一個包含 100 個病例的國家圖表,或跟蹤每個國家隨時間推移的死亡率)。 我使用將日期作為列和國家作為行的數據。 我轉置了數據框,以便為每個國家/地區提供一列和一列日期,如下所示。
我試圖通過以下代碼將此數據幀作為時間序列對象讀取:
covid19ts = ts(covid19, frequency = 365, start = c(2020,22))
結果如下。 我沒有將日期作為我的索引列,而是從 1 - 47(記錄的天數)獲得一個數字。 這導致我無法創建圖表或進行任何有意義的分析。
我還使用 lubridate 包嘗試了以下代碼,結果相同:
covid19ts = ts(covid19, frequency = 365, start= decimal_date(as.Date("2020-01-22")))
如何使我的 ts 日期成為圖表和分析的實際日期?
或者我可以使用一種完全不同的方法,哪種方法更適合我嘗試做的分析?
感謝您的幫助。
您可以將數據保留為數據框並進行有用的繪圖。 也許以長格式獲取數據。
library(tidyverse)
df <- read.csv('https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_19-covid-Confirmed.csv', check.names = FALSE)
df1 <- df %>% pivot_longer(cols = -(1:4))
head(df1)
# A tibble: 6 x 6
# `Province/State` `Country/Region` Lat Long name value
# <fct> <fct> <dbl> <dbl> <chr> <int>
#1 Anhui Mainland China 31.8 117. 1/22/20 1
#2 Anhui Mainland China 31.8 117. 1/23/20 9
#3 Anhui Mainland China 31.8 117. 1/24/20 15
#4 Anhui Mainland China 31.8 117. 1/25/20 39
#5 Anhui Mainland China 31.8 117. 1/26/20 60
#6 Anhui Mainland China 31.8 117. 1/27/20 70
如果要將數據轉換為帖子中所示的時間序列,可以執行以下操作:
df2 <- df1 %>%
group_by(`Country/Region`, name) %>%
summarise(value = sum(value)) %>%
pivot_wider(names_from = `Country/Region`, values_from = value,
values_fill = list(value = 0))
ts_data <- xts::xts(df2[-1], as.Date(df2$name, "%m/%d/%y"))
@G 建議的替代解決方案。 格洛騰迪克依靠zoo
是
z <- read.zoo(df1[c(2, 5:6)], index = "name", split = "Country/Region",
format = "%m/%d/%Y", aggregate = sum)
read.zoo
避免了所有明確的聚集和重塑tidyverse
。 然后我們可以使用autoplot
函數來繪制這個zoo
對象。
而不是使用ts
或xts
對象,這最適合像這樣的tsibble
格式。
library(tidyverse)
library(tsibble)
library(feasts)
covid19 <- read_csv("time_series_19-covid-Confirmed.csv") %>%
pivot_longer(cols = -(1:4)) %>%
mutate(date = lubridate::mdy(name)) %>%
select(-name) %>%
rename(
"Region" = `Province/State`,
"Country" = `Country/Region`
) %>%
as_tsibble(key = c(Region, Country), index = date)
# Plot by country
covid19 %>%
filter(Country %in% c("China", "Italy", "Iran", "South Korea")) %>%
group_by(Country) %>%
summarise(value = sum(value)) %>%
autoplot(value)
由reprex 包(v0.3.0) 於 2020 年 3 月 9 日創建
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.