如何让R中data.table直接返回1/0而非TRUE/FALSE?
在data.table中直接将条件判断结果转为1/0的方法
在data.table里完全可以直接让条件判断返回1/0,不用事后借助base R或dplyr转换,这里给你两种简单直接的实现方式:
方法1:用as.integer()包裹条件表达式
R中布尔值TRUE会被自动转为1,FALSE转为0,NA保持不变,直接把你的判断逻辑放进as.integer()里就能完成转换,修改后的代码如下:
library(data.table) df1 <- data.frame( ID=c(rep(1,3),rep(2,3),rep(3,4)), Mo = c(seq(1:3),seq(1:3),seq(1:4)), stX= c("NA","X","X","NA","NA","NA","NA","X","NA","NA") ) df2 <- df1 df2 <- setDT(df2)[, firstX := as.integer(.I == .I[stX == 'X'][1]), by = ID]
方法2:用+运算符强制转换
给布尔表达式加上+前缀,也能自动将布尔值转为对应的整数,代码更简洁:
df2 <- setDT(df2)[, firstX := +(.I == .I[stX == 'X'][1]), by = ID]
这两种方法都能在分组计算时直接生成1/0的结果,完全满足你的需求。
内容的提问来源于stack exchange,提问作者Village.Idyot
相关产品推荐
相关产品推荐

