Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将数据分离为多个时间序列R_R_Excel - Fatal编程技术网

将数据分离为多个时间序列R

将数据分离为多个时间序列R,r,excel,R,Excel,我有一张美国所有州的excel表格。我想创建一个时间序列出每个州,并有数据频率是每天(目前是按分钟)。到目前为止,我所做的最多的工作就是删除所有多余的列,但我很难想出一种有效的方法,使数据每日按状态分隔,而不必手动执行 我希望将ggplot用于所有这些新的时间序列。我尝试使用melt函数和collect函数,但两者都不起作用 以下是我的部分数据: 其中state列从1到51,日期不时重复,因为其频率为每分钟。我想为每一个州创建一个时间序列,这样我可以并排分析它们。有些州可能没有每天的数据记录,

我有一张美国所有州的excel表格。我想创建一个时间序列出每个州,并有数据频率是每天(目前是按分钟)。到目前为止,我所做的最多的工作就是删除所有多余的列,但我很难想出一种有效的方法,使数据每日按状态分隔,而不必手动执行

我希望将ggplot用于所有这些新的时间序列。我尝试使用melt函数和collect函数,但两者都不起作用

以下是我的部分数据:


其中state列从1到51,日期不时重复,因为其频率为每分钟。我想为每一个州创建一个时间序列,这样我可以并排分析它们。有些州可能没有每天的数据记录,如何用零自动填写这些日期?

欢迎使用SO,Cherry。今后,请提供可复制的示例,而不是数据帧的图片。函数
dput(这里是您的df)
可能很有用

这是我的样本数据,与您的不同:

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")
结果: 结果:
#一个tible:34 x 10
#分组:国家[2]
州日期VEFORMS PVHJNVL PEDS总人数PERMVIT PERNOTMVI FATALS
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
# ... 还有24行

每日值应如何计算?比如说,所有VE_总计、VE_表格等。。是否按州/天汇总?是!但是每一列都是分开的,这样我就可以看到哪一列具有最有意义的值,并选择它。但我希望@NicolásVelásquezI能将它们相加,并确保下次使用该函数!非常感谢。不过,我有一个问题。如果我想把它变成一个时间序列,我知道使用df_ts=ts(df$‘STATE’,freq=365,start=c(2019,1))让我们假设一下。但在您给我的示例数据中,它仍然多次显示了类似于state1的状态。有没有办法把第一排和第四排结合起来?所以它是一个州在一个日期打印的关于ve_总数、veform等的值@NicolásVelásquezI认为我是在group_by()和Summary_at()行中这样做的。看看第1行如何列出
状态
==1,而第4行列出
状态
==2。哦,天啊,是的,我在看两个不同的状态。你说得对。现在,如果我在代码中添加一个部分:%%>%filter(STATE=='1'),我会看到返回325行,这很奇怪,因为它不应该是365行吗?因为如果我试图继续创建我的时间序列,写state1_ts=ts(state1$'VE_TOTAL',freq=365,start=c(2019,1)),我会得到一个奇数的两列集合。或者可能按州过滤没有意义,因为我希望每个州都有一个时间序列。抱歉,还是有点迷路了@Nicolás VelásquezHi Cherry。我的猜测是,州1在365天中只有325天的记录。我猜这样一个州不是佛罗里达,因为我过去每天都从窗口看到事故。如果您需要填写0无事故天数,请将请求添加到您的帖子中。哈哈,您应该负责Floridas崩溃数据!我现在要加上它。@Nicolás Velásquez
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
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