user3290596
user3290596

Reputation: 59

format a time series as dataframe with julian date

I have a time series tt.txt of daily data from 1st May 1998 to 31 October 2012 in one column as this:

    v1
   296.172
   303.24
   303.891
   304.603
   304.207
   303.22
   303.137
   303.343
   304.203
   305.029
   305.099
   304.681
   304.32
   304.471
   305.022
   304.938
   304.298
   304.120

Each number in the text file represents the maximum temperature in kelvin for the corresponding day. I want to put the data in 3 columns as follows by adding year, jday, and the value of the data:

     year jday MAX_TEMP 
1    1959  325 11.7      
2    1959  326 15.6      
3    1959  327 14.4    

Upvotes: 2

Views: 322

Answers (2)

akrun
akrun

Reputation: 887851

If you have a vector with dates, we can convert it to 'year' and 'jday' by

v1 <- c('May 1998 05', 'October 2012 10')
v2 <- format(as.Date(v1, '%b %Y %d'), '%Y %j')
df1 <- read.table(text=v2, header=FALSE, col.names=c('year', 'jday'))
df1
#  year jday
#1 1998  125
#2 2012  284

To convert back from '%Y %j' to 'Date' class

df1$date <- as.Date(do.call(paste, df1[1:2]), '%Y %j')

Update

We can read the dataset with read.table. Create a sequence of dates using seq if we know the start and end dates, cbind with the original dataset after changing the format of 'date' to 'year' and 'julian day'.

dat <- read.table('tt.txt', header=TRUE)
date <- seq(as.Date('1998-05-01'), as.Date('2012-10-31'), by='day')
dat2 <- cbind(read.table(text=format(date, '%Y %j'), 
              col.names=c('year', 'jday')),MAX_TEMP=dat[1])

Upvotes: 1

jalapic
jalapic

Reputation: 14212

You can use yday

as.POSIXlt("8 Jun 15", format = "%d %b %y")$yday

Upvotes: 0

Related Questions