2016-05-20 8 views
0

Meine Daten sind wie folgt. df ist der Name der DatenrahmenErstellen einer neuen Spalte, die den Unterschied in der Zeit zwischen zwei anderen Spalten in Bedingung zu einer anderen Spalte in 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 

Der Status hat 4 Faktoren: Geschlossen, Abgebrochen, In-Progress, Bis In-Progress and Pending haben keine ClosedDates

Ich möchte eine andere Spalte zu schaffen, Gibt den Zeitunterschied zwischen ArrivalDate und ClosedDate nur dann an, wenn Status geschlossen oder abgebrochen ist.

Dies ist der Code ich jetzt benutze:

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

Und das ist die Fehlermeldung Ich

Fehler in as.POSIXlt.character bekommen (x, tz. ..): Zeichenkette in einem Standard-Format eindeutig nicht

PS: difftime() funktioniert richtig, wenn ich mit nur zwei Daten versucht. Wenn es auf die gesamte Spalte erweitert wird, wird der Fehler angezeigt.

+0

Willkommen bei Stack Overflow. Bitte geben Sie ein reproduzierbares Beispiel und die erwartete Ausgabe an. [Schauen Sie sich diesen Link an] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) für weitere Informationen. – Sotos

Antwort

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

Angenommen, Ihre Termine sind europäische (DMY) -Format, wenn sie amerikanische (MYD) sind, dann tauschen Sie einfach die %m und %d.

+0

Die Daten sind im Format für die Uhrzeit angegeben:% y-% m-% d% h:% m:% s. Wenn du deinen Code mit format = "% y-% m-% d% h:% m:% s" versuchst, erhältst du die folgende Warnung und setzt NA in alle Zeilen der 'Life'-Spalte: In df $ Life [df $ Status == "Geschlossen" | df $ Status == "Storniert"] <- Difftzeit (as.Date (df $ Arrival.Date,: Anzahl der zu ersetzenden Artikel ist kein Vielfaches der Ersatzlänge. –

+0

Aus Ihren Daten, '01-12-2015 04 : 40: 24' sieht nicht so aus, als wäre es der 2015. Tag im Dezember 1 Jahr (zum Beispiel) - Ich würde vorschlagen, dass du deine Daten neu interpretierst – hd1

+0

Danke für die Hilfe, es tut mir leid, dass ich sie gemacht habe ein Fehler beim Eintippen der Frage Meine Datumszeit ist von dem Format, das ich im Kommentar erwähnt habe, aber in jedem Fall glaube ich nicht, dass dies ein Problem des Formats ist, weil es funktioniert, wenn ich Datumswerte auf 2 Variablen setze und difftime verwende() Die Verwendung von as.POSIXct() gibt immer noch die gleiche Warnmeldung und NA. Wenn ich ClosedDate-Werte für alles unabhängig vom Status gebe, funktioniert mein ursprünglicher Code (nachdem ich format() mit format() benutzt habe) die Filterung, die nicht funktioniert Ich weiß, dass das keinen Sinn macht, aber das ist was passiert –

Verwandte Themen