r-如何创建具有多个时间序列的时间序列对象



如何将R中的"A.原始数据"转换为"B.时间序列对象",以便一次对多个时间序列执行时间序列分析?请参阅以下输出示例。

A。原始数据

月份项目计数
20150101 123456 116
20150201 123456 266
20150301 123456 261
20150401 123456 179
20150501 123456 121
20150601 123456 147
20150701 123456 77
20150801 123456 327
20150901 123456 309
20151001 123456 402
20151101 123456 116
20151201 123456 165
20150101 234567 405
20150201 234567 244
20150301 234567 114
20150401 234567 262
20150501 234567 126
20150601 234567 111
20150701 234567 498
20150801 234567 353
20150901 234567 208
20151001 234567 111
20151101 234567 400
20151201 234567 11
20140101 123456 114
20140201 123456 451
20140301 123456 389
20140401 123456 253
20140501 123456 280
20140601 123456 89
20140701 123456 310
20140801 123456 260
20140901 123456 221
20141001 123456 371
20141101 123456 133
20141201 123456 269
20140101 234567 234
20140201 234567 151
20140301 234567 479
20140401 234567 184
20140501 234567 79
20140601 234567 499
20140701 234567 238
20140801 234567 10
20140901 234567 383
20141001 234567 23
20141101 234567 185
20141201 234567 232

B。时间序列对象

            Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec  

123456 2014 114 451 389 253 280 89 310 260 221 371 133 269
123456 2015 116 266 261 179 121 147 77 327 309 402 116 165
234567 2014 234 151 479 184 79 499 238 10 383 23 185 232
234567 2015 405 244 114 262 126 111 498 353 208 111 400 11

时间序列分析的适当数据形式当然取决于要执行的分析以及用于执行分析的R函数。话虽如此,有几种方法可以将数据从A格式转换为B。在下面的代码中,lubridate包中的parse_date_timeyearmonth函数用于将month列转换为R POSIX日期对象tmp,然后用新的yearmonth列替换原始的month列。特别是,这会生成新的month列作为一个因子,其中月份按通常的日历序列命名和排序。来自tidyr包的spread使用month列中的唯一值来形成包含count值的新列。代码如下:

  library(lubridate)
  library(tidyr)
# original data in data frame  df_A
  tmp <- parse_date_time(df_A$month, orders="ymd")
  df_B <- cbind( df_A[,-1], year = year(tmp), month=month(tmp, label=TRUE))
  df_B <- spread(df_B, key = month, value = count)

df_B中的结果与输出数据B 相同

最新更新