2017-06-14 3 views
0

Ganz einfach möchte ich Tenure berechnen, wenn ein Mitarbeiter bezeichnet wird, dann möchte ich das neue Feld Term zurückgeben. Date - Job.Entry.Date zur Berechnung der Amtszeit. Andernfalls, wenn der Mitarbeiter aktiv ist, möchte ich, dass das neue Feld Sys.Date - Job.Entry.Date zurückgibt.Berechnen Difftzeit als Sys.Date wenn Feld ist NA in R

Mit dem folgenden Code:

jobentrydat_alltechs$Tenure <-if (jobentrydat_alltechs$Term.Date == is.na) { 
    return (difftime(Sys.Date(), jobentrydat_alltechs$Job.Entry.Date, units = c("days"))) 
} else if (jobentrydat_alltechs$Term.Date != is.na) { 
    return (difftime(jobentrydat_alltechs$Term.Date, jobentrydat_alltechs$Job.Entry.Date, units = c("days"))) 
} 

Ich erhalte die folgenden Fehler

Fehler in ==.default (jobentrydat_alltechs $ Term.Date, is.na):
Vergleich (1) nur für Atom- und Listentypen möglich

+0

Bitte geben Sie ein [reproduzierbares Beispiel] (https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) – Val

Antwort

1

Sie möchten ifelse anstelle von if, wie es vektorisiert ist, und auch is.na ist eine Funktion, kein Wert, mit dem verglichen werden soll.

jobentrydat_alltechs$Tenure <- ifelse(is.na(jobentrydat_alltechs$Term.Date), 
    difftime(Sys.Date(), jobentrydat_alltechs$Job.Entry.Date, units = c("days")), 
    difftime(jobentrydat_alltechs$Term.Date, jobentrydat_alltechs$Job.Entry.Date, units = c("days"))) 
+0

Ich versuchte es, wie Sie mit haben Sowohl ifelse als auch is.na (jobentrydat_alltechs $ Term.Date) erhielten aber einen weiteren Fehler. Ich sehe, dass mein wahrer Fehler mit einem Wenn, dann einem Iselse im Gegensatz zu einem Ifelse begann. Vielen Dank. –