Converting date in Year.decimal form in R

I have a ts column that saves years in decimal format ie

1988.0
1988.25
1988.5
1988.75

and so on. I need to export it to a .csv file with the date in a "DD-MM-YYYY" format.

How do I do this?


Solution 1:

The lubridate package has a function, date_decimal that you can use for this.

x <- c(1988.0, 1988.25, 1988.5, 1988.75)
library(lubridate)
(f <- format(date_decimal(x), "%d-%m-%Y"))
# [1] "01-01-1988" "01-04-1988" "02-07-1988" "01-10-1988"

Then you can write it to a csv with

write.csv(f, "afilename.csv")   ## or write.table()

You'll probably want to check the output first and adjust some of the arguments to whatever format you want.

Solution 2:

To deal with those year-fractions,

> date_string <- '1988.99'
> date_num <- as.numeric(date_string)
> year <- floor(date_num)
> year_beginning <- as.POSIXct(paste0(year, '-01-01'))
> year_end <- as.POSIXct(paste0(year+1, '-01-01'))
> year_length <- year_end - year_beginning
> year_fraction <- date_num %% 1
> date <- year_beginning + year_length * year_fraction
> format(date, format='%Y-%m-%d')
[1] "1988-12-28"

For writing a csv, try help(write.table)