AIM: To convert a time series object to a data frame.
DATA: datasets::Seatbelts
PROBLEM: This is a time series object that has as timestamp a month and a year. I want to extract the month and year in separate columns. See:
> 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
I have already read this post:
Converting ts object to data.frame
The issue with that solution:
data.frame(as.matrix(seatbelts), date=time(seatbelts))
Is that I get a column date with only the year, the month seems to be lost:
> 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
I want either a date column with month and year, or a separate column for both date and year.
The date you get is actually a decimal year, so the month is in there still. If you want to have two columns, year and month, you can try something like:
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With