Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Time series to data frame

Tags:

r

time-series

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.

like image 979
delcast Avatar asked Jan 22 '26 08:01

delcast


1 Answers

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
like image 50
alko989 Avatar answered Jan 24 '26 05:01

alko989



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!