2017-05-31 9 views
0

次のデータフレームdfには2つの日付列が含まれています。データフレームに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 

私は2つの簡単な機能を書いています。 2つの日付の間の日数をカウントするものと、特定の日(月曜日、火曜日など)が特定の日付であるものを検出するもの。

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()などをデータフレームに使用して、各行の2つの日付の間の日数を計算します(関数anticipation()を使用)。また、2番目の日付のすべての日付の正確な日を検索します列(関数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

関連する問題