【问题标题】:Calculate difftime as Sys.Date if field is NA in R如果字段在 R 中为 NA,则将 difftime 计算为 Sys.Date
【发布时间】:2017-06-14 14:38:16
【问题描述】:

很简单,我想计算任期,如果一个员工被命名,那么我希望新字段返回 Term。 Date - 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) 仅适用于 atomic 和 list 类型

【问题讨论】:

标签: r


【解决方案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")))

【讨论】:

  • 我尝试过使用 ifelse 和 is.na(jobentrydat_alltechs$Term.Date) 的方法,但又遇到了另一个错误。我看到我真正的错误是从 if 开始,然后是 ifelse,而不是 ifelse。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-04
  • 2016-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-27
  • 1970-01-01
相关资源
最近更新 更多