我有以下数据框df
,其中包含两列日期。
pnr_date departuredate
1 06/10/2014 00:00:00 06/11/2014 00:00:00
2 12/06/2013 00:00:00 12/06/2013 00:00:00
3 12/03/2013 00:00:00 12/03/2013 00:00:00
4 03/11/2012 00:00:00 03/12/2012 00:00:00
5 08/29/2011 00:00:00 09/01/2011 00:00:00
6 03/10/2012 00:00:00 03/10/2012 00:00:00
我写了两个简单的函数。一个计算两个日期之间的天数,一个查明哪一天(星期一,星期二等)是给定日期。
anticipation<-function(date1,date2){
ForDate1<-strsplit(date1," ")[[1]][1]
ForDate2<-strsplit(date2," ")[[1]][1]
as.numeric(as.POSIXct(parse_date_time(ForDate2,"mdy"))-as.POSIXct(parse_date_time(ForDate1,"mdy")))
}
和
wDay<-function(date){
ForDate<-strsplit(date," ")[[1]][1]
weekdays(as.Date(parse_date_time(ForDate,"mdy")))
}
他们都使用库lubridate
。
有没有办法在数据框上使用apply()
或类似的方法来计算每行两个日期之间的天数(使用函数anticipation()
),还可以找到确切的日期对于第二列中的所有日期(使用函数wDay()
)?
提前谢谢。
答案 0 :(得分:1)
要计算天数差异,请使用
df$days.between <- as.numeric(
difftime(
strptime(df$pnr_date, format = "%m/%d/%Y %H:%M:%S"),
strptime(df$departuredate, format = "%m/%d/%Y %H:%M:%S"),
units = "days"
)
)
e.g。
as.numeric(
difftime(
strptime("09/01/2011 00:00:00", format = "%m/%d/%Y %H:%M:%S"),
strptime("08/29/2011 00:00:00", format = "%m/%d/%Y %H:%M:%S"),
units = "days"
)
)
[1] 3
要获得工作日,请使用
df$weekday <- weekdays(as.Date(df$departuredate))
e.g。
weekdays(as.Date("09/01/2011 00:00:00"))
[1] "Tuesday"
如果您需要非英文名称,则需要设置您的语言区域:
Sys.setlocale("LC_TIME", "de_DE")
[1] "de_DE"
weekdays(as.Date("09/01/2011 00:00:00"))
[1] "Dienstag"