如何将日期转换为R中的天数

use*_*143 6 r

如何将日期转换为从一年的第一天开始的天数.

如何将以下内容转换为下面的预期结果?

   Date               
02/01/2000         
20/02/2000         
12/12/2000         
13/01/2001   
Run Code Online (Sandbox Code Playgroud)

以下是预期结果.

Date               NumDays  TotalDays
02/01/2000          1          1
20/02/2000          51         51
12/12/2000          346        346
13/01/2001          13         379
Run Code Online (Sandbox Code Playgroud)

JT8*_*T85 8

加载数据集

df <- structure(list(Date = structure(c(1L, 4L, 2L, 3L), .Label = c("02/01/2000", 
"12/12/2000", "13/01/2001", "20/02/2000"), class = "factor"), 
    Date2 = structure(c(10958, 11007, 11303, 11335), class = "Date"), 
    NumDays = structure(c(1, 50, 346, 378), units = "days", class = "difftime")), .Names = c("Date", 
"Date2", "NumDays"), row.names = c(NA, -4L), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)

格式日期:

startdate <- as.Date("01/01/2000","%d/%m/%Y")
df$Date2 <-  as.Date(df$Date,"%d/%m/%Y")
Run Code Online (Sandbox Code Playgroud)

使用difftime来计算天的差异

df$NumDays  <- difftime(df$Date2,startdate ,units="days")

df

         Date      Date2  NumDays
# 1 02/01/2000 2000-01-02   1 days
# 2 20/02/2000 2000-02-20  50 days
# 3 12/12/2000 2000-12-12 346 days
# 4 13/01/2001 2001-01-13 378 days
Run Code Online (Sandbox Code Playgroud)


had*_*ley 8

这是使用lubridate包的解决方案:

library(lubridate)

x <- c("02/01/2000", "20/02/2000", "12/12/2000", "13/01/2001")
date <- dmy(x)

days <- yday(date) - 1 # so Jan 1 = day 0 
total_days <- cumsum(days)
Run Code Online (Sandbox Code Playgroud)


The*_*Man 1

startvalue <- "01/01/2000"
dt <- data.table(
datevalue <- c("13/01/2001","12/12/2000")
)
DateFormat <- "%d/%m/%Y"

dt[,datevalue := as.Date(datevalue,DateFormat)]
startvalue <- as.Date(startvalue,DateFormat)

dt[,TotalDays := datevalue - startvalue]

dt[,Jan01 := as.Date(paste0('01/01/',strftime(datevalue,'%Y')),DateFormat)]
dt[,NumDays := datevalue - Jan01]
Run Code Online (Sandbox Code Playgroud)