如果R中的字段为NA,则将difftime计算为Sys.Date

时间:2017-06-14 14:38:16

标签: r

很简单,我想计算任期,如果雇员被称为,那么我希望新字段返回Term。日期 - Job.Entry.Date计算任期。否则,如果员工处于活动状态,那么我希望新字段返回Sys.Date - Job.Entry.Date。

使用以下代码:

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

我收到以下错误

  

==.default中的错误(jobentrydat_alltechs $ Term.Date,is.na):
  比较(1)仅适用于原子和列表类型

1 个答案:

答案 0 :(得分:1)

您希望ifelse代替if,因为它是矢量化的,is.na也是一个函数,而不是要与之比较的值。

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