Count number of days since a specific date [duplic

2019-09-10 12:25发布

问题:

This question already has an answer here:

  • Get the difference between dates in terms of weeks, months, quarters, and years 7 answers

I have got a dataframe with a column Date in which the observations range from 1974-10-01 to 2014-30-09. I would like to create a new column ("Day") in the dataframe which specify the number of day since the first time period day (i.e. 1974-10-01).

I already have the code and it worked perfectly for a really similar dataframe but I do not know why with this 2nd dataframe it does not work.

1) The code is the following:

library(lubridate)
ref_date <- dmy("01-10-1974")
df$Day <- as.numeric(difftime(df$Date, ref_date))

2) The first rows of my dataframe are:

     Code  Area        Date    Height
1    2001  551.4 1975-04-01   120.209
2    2001  551.4 1976-01-06   158.699
3    2001  551.4 1977-01-21   128.289
4    2001  551.4 1978-02-23   198.254
5    2001  551.4 1979-07-31   131.811
[....]

3) What I obtain with my code (1) is the following:

     Code   Area       Date        Day    Height
1    2001  551.4 1975-04-01   15724800  120.209
2    2001  551.4 1976-01-06   39916800  158.699
3    2001  551.4 1977-01-21   72835200  128.289
4    2001  551.4 1978-02-23  107222400  198.254
5    2001  551.4 1979-07-31  152409600  131.811
[....]

I spent more than 2 hours wondering why without any clue.

Any suggestion?

回答1:

Are you looking for something like the example below :

df <- data.frame(Date = c("1975-04-01"))
> df
        Date
1 1975-04-01

df$new_col <- as.Date(as.character(df$Date), format="%Y-%m-%d") - as.Date(as.character("1974-10-01"), format="%Y-%m-%d")
> df
        Date  new_col
1 1975-04-01 182 days
> 


回答2:

Another option

difftime(ref_date,df$Date,units = "days")


回答3:

Your code seems to work as long as the Date is a character column.

library(lubridate)
ref_date <- dmy("01-10-1974")

df<- data.frame(Code=2001, Area=551.4,  Date=c("1975-04-01","1976-01-06","1977-01-21","1978-02-23","1979-07-31"), Height=c(120.209, 158.699, 128.289, 198.254, 131.811))

df$Day <- as.numeric(difftime(df$Date, ref_date))