簡體   English   中英

將數據分成多個時間序列 R

[英]Separate data into multiple time series R

我有一張包含美國所有州的 excel 表。 我想從每個 state 中創建一個時間序列,並將數據頻率設為每天(目前是按分鍾)。 到目前為止,我所做的最多的是刪除所有多余的列,但我很難想出一種有效的方法來每天制作數據並由 state 分隔,而無需手動操作。

我希望將 ggplot 與所有這些新的時間序列一起使用。 我嘗試使用熔化 function 並收集 function 但兩者都不起作用。

這是我的部分數據:

在此處輸入圖像描述 state 列從 1 到 51 並且日期不時重復,因為它的頻率是每分鍾。 我想最終為這些狀態中的每一個創建一個時間序列,以便我可以並排分析它們。 有些州可能沒有每天的數據記錄,如何將這些日期自動填寫為零?

歡迎來到 SO,櫻桃。 將來,請提供可重現的示例,而不是數據框的圖片。 function dput(your_df_here)可能有用。

這是我的示例數據,與您的不同:

df <- structure(list(STATE = c(1, 1, 1, 2, 2, 2), VETOTAL = c(2, 2, 3, 1, 1, 2), VEFORMS = c(2, 2, 3, 1, 1, 2), 
           PVHJNVL = c(0, 0, 0, 0, 0, 0), PEDS = c(0, 0, 0, 1, 0, 0), PERSONS = c(3, 2, 4, 1, 1, 2), 
           PERMVIT = c(3, 2, 4, 1, 1, 2), PERNOTMVI = c(0, 0, 0, 1, 0, 0), COUNTY = c(81, 55, 29, 55, 3, 85), 
           CITY = c(2340, 1280, 0, 2562, 0, 0), DAY = c(7, 23, 22, 7, 23, 22), MONTH = c(2, 1, 1, 2, 1, 1), 
           YEAR = c(2019, 2019, 2019, 2019, 2019, 2019), FATALS = c(1, 1, 1, 1, 0, 1), DRUNK_DR = c(1, 0, 0, 0, 1, 0)), 
       row.names = c(NA, -6L), class = "data.frame")

下面是如何在{tidyverse}的幫助下創建一個日期觀察,按 State 和日期分組,然后總結一個總和。

library(tidyverse)
df %>% 
   mutate(date = as.Date(paste(YEAR, MONTH, DAY, sep = "-"))) %>% # create a date
   group_by(STATE, date) %>% # Group by State id and date
   summarise_at(.vars = vars(VETOTAL:PERNOTMVI, FATALS, DRUNK_DR), sum) ## Summarise a sum of those variables between VETOTAL and PERNOTMVI, plus FATALS and DRUNK_DR

結果:

# A tibble: 6 x 10
# Groups:   STATE [2]
  STATE date       VETOTAL VEFORMS PVHJNVL  PEDS PERSONS PERMVIT PERNOTMVI FATALS
  <dbl> <date>       <dbl>   <dbl>   <dbl> <dbl>   <dbl>   <dbl>     <dbl>  <dbl>
1     1 2019-01-22       3       3       0     0       4       4         0      1
2     1 2019-01-23       2       2       0     0       2       2         0      1
3     1 2019-02-07       2       2       0     0       3       3         0      1
4     2 2019-01-22       2       2       0     0       2       2         0      1
5     2 2019-01-23       1       1       0     0       1       1         0      0
6     2 2019-02-07       1       1       0     1       1       1         1      1

填補缺失的日期。

如果您想用 0 填充某個范圍內缺失日期的值(即那些沒有記錄觀察的日期),我們可以在{padr}的幫助下完成

library(padr)
    df %>% 
  mutate(date = as.Date(paste(YEAR, MONTH, DAY, sep = "-"))) %>% 
  group_by(STATE, date) %>% 
  summarise_at(.vars = vars(VETOTAL:PERNOTMVI, FATALS), sum) %>% 
  padr::pad(start_val = min(.$date), #This sets the start value as the earliest date present in the "date" variable 
            end_val = max(.$date)) %>%    #This sets the end value as the earliest date present in the "date" variable
  fill_by_value(value = 0)

結果:

# A tibble: 34 x 10
# Groups:   STATE [2]
   STATE date       VETOTAL VEFORMS PVHJNVL  PEDS PERSONS PERMVIT PERNOTMVI FATALS
   <dbl> <date>       <dbl>   <dbl>   <dbl> <dbl>   <dbl>   <dbl>     <dbl>  <dbl>
 1     1 2019-01-22       3       3       0     0       4       4         0      1
 2     1 2019-01-23       2       2       0     0       2       2         0      1
 3     1 2019-01-24       0       0       0     0       0       0         0      0
 4     1 2019-01-25       0       0       0     0       0       0         0      0
 5     1 2019-01-26       0       0       0     0       0       0         0      0
 6     1 2019-01-27       0       0       0     0       0       0         0      0
 7     1 2019-01-28       0       0       0     0       0       0         0      0
 8     1 2019-01-29       0       0       0     0       0       0         0      0
 9     1 2019-01-30       0       0       0     0       0       0         0      0
10     1 2019-01-31       0       0       0     0       0       0         0      0
# ... with 24 more rows

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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