user2485450
user2485450

Reputation: 21

R - Aggregate Dates

When aggregating an R dataframe, the dates are converted in integer :

For instance, if I want to take the maximum dates for every Id in the following dataframe :

> df1 <- data.frame(id = rep(c(1, 2), 2), b = as.Date(paste("01/01/", 2000:2003, sep=''), format = "%d/%m/%Y"))
> df1
  id          b
1  1 2000-01-01
2  2 2001-01-01
3  1 2002-01-01
4  2 2003-01-01
> aggregate(x = list(b = df1$b), by = list(id = df1$id), FUN = "max")
  id     b
1  1 11688
2  2 12053

Why does R behave this way ? (and what's the best way to keep a date class column in the returned dataframe?)

Thanks for your help,

Upvotes: 0

Views: 2135

Answers (1)

Asayat
Asayat

Reputation: 633

That works for me R version 3, perhaps there were some changes in updates, so I recommend you to update R :) As for this version of R, have you tried as.Date() function after aggregating? In your example, should be like:

    dtf2<-aggregate(x = list(b = df1$b), by = list(id = df1$id), FUN = "max")
    dtf2$b<-as.Date(dtf$b)

You can also add 'origin' option to as.Date, like

    as.Date(dtf$b, origin='1970-01-01') 

UPD: When R looks at dates as integers, its origin is January 1, 1970.

Hope that will help.

Upvotes: 1

Related Questions