2016-05-20 4 views
0

私のデータはこのようなものです。 DFは、データフレームの名前です条件内の他の2つの列間の時間の差をR内の別の列に作成する新しい列を作成する

Status   ArrivalDate     ClosedDate  
Closed   2015-12-01 04:40:24   2015-12-08 10:12:08 
In Progress  2015-12-03 06:40:00 
Pending   2015-12-12 08:40:54 
Cancelled  2015-12-06 04:40:24   2015-12-18 11:33:50 

ステータスが4つの要因があります。進行中のクローズ、キャンセル、進行中と保留中ClosedDates

私は別の列を作成したいを持っていない を保留していますStatusがClosedまたはCanceledの場合にのみArrivalDateとClosedDateの時間差を与えます。

これは私が今使っているコードです:

df$Life[df$Status=="Closed"|df$Status=="Cancelled"]<-difftime(df$Arrival.Date,df$Closed.Date) 

そして、これは私が、as.POSIXlt.characterで

エラー(X、TZを取得していますエラーメッセージです。 ...):私はちょうど2つの日付をしようとしたときに正しく動作difftime(): 文字列は、標準の明確な形式

PSではありません。列全体に拡張すると、エラーが表示されます。彼らはアメリカ(MYD)をしている場合

+0

ようこそスタックオーバーフロー。再現可能な例と期待される出力を提供してください。詳細については、[このリンクをご覧ください](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)。 – Sotos

答えて

0

df$Life[df$Status=="Closed"|df$Status=="Cancelled"]<-difftime(as.POSIXct(df$Arrival.Date, format='%d-%m-%Y %H:%M:%S'),as.POSIXct(df$Closed.Date, format='%d-%m-%Y %H:%M:%S'))

と仮定すると、あなたの日付はちょうど%m%dスワップ、ヨーロッパ(DMY)形式です。

+0

日付は日付の時刻形式です:%y-%m-%d%h:%m:%s。 format = "%y-%m-%d%h:%m:%s"でコードを実行しようとすると、次の警告が表示され、NAが 'Life'列のすべての行に表示されます。df $ Life [df $ Status == "クローズド" | df $ Status == "Canceled"] < - difftime(as.Date(df $ Arrival.Date、:0​​)交換するアイテムの数が置換の長さの倍数ではない –

+0

データから、 '01-12-2015 04 :40:24は、AD 1年目の12月の2015年の日には見えません - あなたのデータを再解釈することをお勧めします。 – hd1

+0

助けてくれてありがとう、私は申し訳ありません私の日付の時間は、私がコメントで言及した形式ですが、いずれにしても、私は日付の時間を2変数に設定してdifftimeを使うときに働くので、これはフォーマットの問題ではないと思います()を使用してas.POSIXct()を使用しても、同じ警告メッセージとNAが返されます。Statusに関係なくClosedDateの値を与えると、元のコードが機能します。フィルタリングは機能していません。私はそれが理にかなっていないことは知っていますが、何が起きているのですか? –

関連する問題