17

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?

Rich Scriven
  • 97,041
  • 11
  • 181
  • 245
monkeyshines
  • 1,058
  • 2
  • 8
  • 25

2 Answers2

26

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.

Rich Scriven
  • 97,041
  • 11
  • 181
  • 245
9

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)

pjvandehaar
  • 1,070
  • 1
  • 10
  • 24
  • 1
    I was actually trying to code it like that and kept getting stumped. I am new to R. Great community. Sorted in one day!!! – monkeyshines Nov 18 '14 at 05:55