我有一个看起来像
的数据框(实际上是一个数据表)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
等对象?
答案 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