user2737555
user2737555

Reputation:

How do I change the index in a csv file to a proper time format?

I have a CSV file of 1000 daily prices

They are of this format:

1    1.6
2    2.5
3    0.2
4     ..
5     ..
6
7     ..
.
.
1700 1.3

The index is from 1:1700

But I need to specify a begin date and end date this way:

Start period is lets say, 25th january 2009 and the last 1700th value corresponds to 14th may 2013

So far Ive gotten this close to this problem:

> dseries <- ts(dseries[,1], start = ??time??, freq = 30)

How do I go about this? thanks

UPDATE: managed to create a seperate object with dates as suggested in the answers and plotted it, but the y axis is weird, as shown in the screenshot enter image description here

Upvotes: 0

Views: 93

Answers (2)

zx8754
zx8754

Reputation: 56149

Something like this?

as.Date("25-01-2009",format="%d-%m-%Y") + (seq(1:1700)-1)

A better way, thanks to @AnandaMahto:

seq(as.Date("2009-01-25"), by="1 day", length.out=1700)

Plotting:

df <- data.frame(
  myDate=seq(as.Date("2009-01-25"), by="1 day", length.out=1700),
  myPrice=runif(1700)
                    )

plot(df)

Upvotes: 3

IRTFM
IRTFM

Reputation: 263332

R stores Date-classed objects as the integer offset from "1970-01-01" but the as.Date.numeric function needs an offset ('origin') which can be any staring date:

rDate <- as.Date.numeric(dseries[,1], origin="2009-01-24")

Testing:

> rDate <- as.Date.numeric(1:10, origin="2009-01-24")
> rDate
 [1] "2009-01-25" "2009-01-26" "2009-01-27" "2009-01-28" "2009-01-29"
 [6] "2009-01-30" "2009-01-31" "2009-02-01" "2009-02-02" "2009-02-03"

You didn't need to add the extension .numeric since R would automticallly seek out that function if you used the generic stem, as.Date, with an integer argument. I just put it in because as.Date.numeric has different arguments than as.Date.character.

Upvotes: 2

Related Questions