【发布时间】:2021-04-24 07:01:48
【问题描述】:
我有一个包含 8 列的数据集,8 列中有 7 列是日期列。我需要比较一列中的日期,例如 ReferenceDate 与其他列中的日期,例如 DateCol1, DateCol2, DateCol3, DateCol4, DateCol5, DateCol6, DateCol7
ID DateCol1 DateCol2 DateCol3 DateCol4 ReferenceDate DateCol5 DateCol6 DateCol7
12 2000-11-03 2007-05-17 2003-07-11 2014-03-19 2000-07-11 1999-10-06 2015-06-29 2014-07-06
17 2015-12-16 2017-07-26 2015-01-13 2020-01-30 2015-03-08 2007-07-30 2020-05-21 2010-10-09
19 2003-03-06 2011-02-23 2001-09-18 2001-04-05 2013-05-17 1999-10-02 2004-08-26 2019-04-15
23 2002-10-06 2019-03-12 1999-04-19 2008-04-03 2006-11-20 2000-11-15 2010-07-22 1999-05-27
22 2019-05-19 2014-11-17 2001-03-24 2003-07-03 2001-04-02 2017-06-03 2016-09-21 2013-07-13
我的目标是创建一个列 Yes/No 值,指示 ReferenceDate 列中的日期是早于还是晚于其他 7 个日期列中的任何日期。
ID DateCol1 DateCol2 DateCol3 DateCol4 ReferenceDate DateCol5 DateCol6 DateCol7 Status
12 2000-11-03 2007-05-17 2003-07-11 2014-03-19 2000-07-11 1999-10-06 2015-06-29 2014-07-06 Yes (DateCol5 earlier than Reference Date)
17 2015-12-16 2017-07-26 2015-01-13 2020-01-30 2015-03-08 2007-07-30 2020-05-21 2010-10-09 Yes (DateCol5 earlier than Reference Date)
19 2003-03-06 1981-02-23 2001-09-18 2001-04-05 2013-05-17 1999-10-02 2004-08-26 2019-04-15 Yes (DateCol2 earlier than Reference Date)
23 1992-10-06 2019-03-12 1999-04-19 2008-04-03 2006-11-20 2000-11-15 2010-07-22 1999-05-27 Yes (DateCol1 earlier than Reference Date)
22 2019-05-19 2014-11-17 2001-03-24 2003-07-03 2001-04-02 2017-06-03 2016-09-21 2013-07-13 No
我想我可以使用很多嵌套的 ifelse 来做到这一点,但我会发疯的。我需要一些帮助如何更有效地完成此任务。提前致谢。
【问题讨论】:
-
输入的'ReferenceDate'和'expected'不一样,尤其是最后一个
-
你的意思是
nm1 <- grep('^DateCol', names(df1), value = TRUE);c("No", "Yes")[(rowSums(df1[nm1] > df1$ReferenceDate) != 0) + 1] -
@akrun 我认为 OP 在最后一行有错字。您的解决方案肯定会奏效。
-
@akrun,你是对的。我现在解决了这个问题。此外,我更喜欢没有 grep 函数的方法,因为实际数据集中的 Date 列在其列名中没有重复模式。在本例中,为了方便起见,我使用了带有重复模式的列名。
-
@bison2178 日期列是否在一个范围内,即从第 3 列到最后一列左右
标签: r date if-statement compare