数据表中的有效日期比较

时间:2015-02-15 05:51:04

标签: r data.table

我有一个看起来像

的数据框(实际上是一个数据表)
id  hire.date   survey.year
1   15-04-2003  2003
2   16-07-2001  2001
3   06-06-1980  2002  
4   17-08-1981  2001

我需要检查hire.date是否小于survey.year的3月31日。所以我最终会得到像

这样的东西
id  hire.date   survey.year   emp31mar
1   15-04-2003  2003          FALSE
2   16-07-2001  2001          FALSE
3   06-06-1980  2002          TRUE
4   17-08-1981  2001          TRUE

我总是可以创建一个持有survey.year 3月31日的对象然后进行适当的比较

mar31 = as.Date(paste0("31-03-", as.character(myData$survey.year)), "%d-%m-%Y")

myData$emp31 = myData$hiredate < mar31

但是创建对象mar31会消耗太多时间,因为myData很大(想想数千万行)。

我想知道是否有更有效的方法可以做到这一点 - 这种方式不涉及创建mar31等对象?

1 个答案:

答案 0 :(得分:0)

您可以尝试使用data.table方法创建列。

library(data.table)
setDT(df1)[,  emp31mar:= as.Date(hire.date, '%d-%m-%Y') <
             paste(survey.year, '03-31', sep="-")][]
#     id  hire.date survey.year emp31mar
#1:  1 15-04-2003        2003    FALSE
#2:  2 16-07-2001        2001    FALSE
#3:  3 06-06-1980        2002     TRUE
#4:  4 17-08-1981        2001     TRUE