R中如何基于多个条件为data.table字段返回TRUE/FALSE布尔值
实现方法
首先需要处理日期列的格式转换(原数据中日期为字符串类型,无法直接做范围判断),之后按照需求逻辑直接给result_2010列赋值即可,完整代码如下:
library(data.table) # 方法1:先统一转换日期列格式,后续也可复用转换后的日期字段 dt[, c("entry", "exit") := lapply(.SD, as.Date, format = "%d/%m/%Y"), .SDcols = c("entry", "exit")] dt[, result_2010 := text %in% c("a", "c") & exit %between% c(as.Date("2010-01-01"), as.Date("2010-12-31"))] # 方法2:如果不需要修改原表的日期列,可在判断时临时转换格式 dt[, result_2010 := text %in% c("a", "c") & as.Date(exit, format = "%d/%m/%Y") %between% c(as.Date("2010-01-01"), as.Date("2010-12-31"))]
逻辑说明
text %in% c("a", "c")会自动把text为NA、以及取值为其他字符的场景返回FALSE,无需额外处理空值- 日期范围判断使用data.table内置的
%between%运算符,写法更简洁,也可以替换成>=、<=的常规比较写法,效果完全一致 - 两个条件用
&连接,只有同时满足才会返回TRUE,其余所有情况均返回FALSE,和需求完全匹配。
内容的提问来源于stack exchange,提问作者Besz15
相关产品推荐
相关产品推荐

