簡體   English   中英

如何將此數據幀轉換為 R 中的多個時間序列對象?

[英]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對象。

而不是使用tsxts對象,這最適合像這樣的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM