【发布时间】:2017-06-23 20:43:05
【问题描述】:
我有以下数据集,其中包含包含日期的三列。
library(dplyr)
set.seed(45)
df1 <- data.frame(hire_date = sample(seq(as.Date('1999/01/01'), as.Date('2000/01/01'), by="week"), 10),
t1 = sample(seq(as.Date('2000/01/01'), as.Date('2001/01/01'), by="week"), 10),
t2 = sample(seq(as.Date('2000/01/01'), as.Date('2001/01/01'), by="day"), 10))
#this value is actually unknown
df1[10,2] <- NA
hire_date t1 t2
1 1999-08-20 2000-05-13 2000-02-17
2 1999-04-23 2000-11-11 2000-04-27
3 1999-03-26 2000-04-15 2000-08-01
4 1999-05-07 2000-06-03 2000-08-29
5 1999-04-30 2000-05-27 2000-11-19
6 1999-04-09 2000-12-30 2000-01-26
7 1999-03-12 2000-12-23 2000-12-07
8 1999-06-25 2000-02-12 2000-09-26
9 1999-02-26 2000-05-06 2000-08-23
10 1999-01-01 <NA> 2000-03-18
如果 t1 OR t2 和hire_date 之间的差异在 [395,500] 之间,我想执行一个 if else 语句,这样 df1$com 为 1
下面的 if_else 语句几乎可以让我到达那里,但 NA 把它搞砸了。有什么想法吗?
df1$com <- if_else((df1$t1 - df1$hire_date) >= 395 &
(df1$t1 - df1$hire_date) <= 500, 1,
if_else((df1$t2 - df1$hire_date) >= 395 &
(df1$t2 - df1$hire_date) <= 500, 1, 0))
【问题讨论】:
-
也许在这里和那里添加一些
& !is.na语句。 -
应该如何处理
NA? -
这样的...
df1$com <- if_else(!is.na(df1$t1) & (df1$t1 - df1$hire_date) >= 395 & (df1$t1 - df1$hire_date) <= 500, 1, if_else(!is.na(df1$t2) & (df1$t2 - df1$hire_date) >= 395 & (df1$t2 - df1$hire_date) <= 500, 1, 0))? -
是的,我想我已经盯着它太久了,以至于没有意识到这是显而易见的解决方案。感谢您的帮助!
标签: r if-statement dplyr