You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 03:23:27