目标::要将时间序列对象转换为数据框。
数据: 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
我想要一个包含月份和年份的日期列,或者一个单独的日期和年份列。
答案 0 :(得分: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
答案 1 :(得分: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