时间序列数据帧

问题描述 投票:2回答:2

目的:一个时间序列对象转换为数据帧。

数据:datasets::Seatbelts

问题:这是一个有一个月和一年时间戳的时间序列对象。我想提取月份和年份在单独的列。看到:

> Seatbelts
         DriversKilled drivers front rear   kms PetrolPrice VanKilled law
Jan 1969           107    1687   867  269  9059     0.10297        12   0
Feb 1969            97    1508   825  265  7685     0.10236         6   0
Mar 1969           102    1507   806  319  9963     0.10206        12   0
Apr 1969            87    1385   814  407 10955     0.10087         8   0
May 1969           119    1632   991  454 11823     0.10102        10   0
Jun 1969           106    1511   945  427 12391     0.10058        13   0
Jul 1969           110    1559  1004  522 13460     0.10377        11   0

我已经阅读这篇文章:

Converting ts object to data.frame

与该解决方案的问题:

data.frame(as.matrix(seatbelts), date=time(seatbelts))

是,我得到一个列日期只有一年,一个月似乎丢失:

> data.frame(as.matrix(seatbelts), date=time(seatbelts))
    DriversKilled drivers front rear   kms PetrolPrice VanKilled law date
1             107    1687   867  269  9059     0.10297        12   0 1969
2              97    1508   825  265  7685     0.10236         6   0 1969
3             102    1507   806  319  9963     0.10206        12   0 1969
4              87    1385   814  407 10955     0.10087         8   0 1969
5             119    1632   991  454 11823     0.10102        10   0 1969
6             106    1511   945  427 12391     0.10058        13   0 1969

我想无论是用年份和月份日期列,或日期和一年一个单独的列。

r time-series
2个回答
1
投票

你得到的日期实际上是一个小数年,所以这个月是不是还在那里。如果你想有两列,年份和月份,你可以尝试这样的:

res <- data.frame(as.matrix(Seatbelts), date=time(Seatbelts))
res$year <- trunc(res$date)
res$month <- (res$date - res$year) * 12 + 1
res

##  DriversKilled drivers front rear   kms PetrolPrice VanKilled law     date year month
## 1           107    1687   867  269  9059   0.1029718        12   0 1969.000 1969     1
## 2            97    1508   825  265  7685   0.1023630         6   0 1969.083 1969     2
## 3           102    1507   806  319  9963   0.1020625        12   0 1969.167 1969     3
## 4            87    1385   814  407 10955   0.1008733         8   0 1969.250 1969     4
## 5           119    1632   991  454 11823   0.1010197        10   0 1969.333 1969     5
## 6           106    1511   945  427 12391   0.1005812        13   0 1969.417 1969     6

0
投票

我可能误解了要求,但要获得个月和一年的产量,与去年月日,您都可以转换成先xts格式数据框 - 后者转换好得多通常记录比ts对象。下面的操作是很不成熟 - 提取文本到新列。

library(xts)
library(tidyverse)

tsx <- as.xts(datasets::Seatbelts)
df <- data.frame(date=index(tsx), coredata(tsx)) %>%
  mutate(date_chr = as.character(date),
         month    = substr(date, 1, 3),
         year     = substr(date, 5, 8))

      date DriversKilled drivers front rear   kms PetrolPrice VanKilled law date_chr month year
1 Jan 1969           107    1687   867  269  9059   0.1029718        12   0 Jan 1969   Jan 1969
2 Feb 1969            97    1508   825  265  7685   0.1023630         6   0 Feb 1969   Feb 1969
3 Mar 1969           102    1507   806  319  9963   0.1020625        12   0 Mar 1969   Mar 1969
4 Apr 1969            87    1385   814  407 10955   0.1008733         8   0 Apr 1969   Apr 1969
5 May 1969           119    1632   991  454 11823   0.1010197        10   0 May 1969   May 1969
6 Jun 1969           106    1511   945  427 12391   0.1005812        13   0 Jun 1969   Jun 1969
© www.soinside.com 2019 - 2024. All rights reserved.