2017-05-31 34 views
0

我有以下數據框df包含兩列日期。對數據區域框應用udfs

   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())?

預先感謝您。

回答

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" 
    ) 
) 

例如

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)) 

例如

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" 
+0

謝謝,這個作品! – user159941