如何让data.table直接返回值1/0而不是TRUE/FALSE?

wfsdck30  于 2023-02-26  发布在  其他
关注(0)|答案(1)|浏览(133)

我想知道在测试条件时,R中的data.table是否有直接的方法返回值1/0,而不是TRUE/FALSE/NA。在下面的MWE代码中,data.table在遇到给定ID组的“stX”列中的第一个X值时,正确地在“firstX”列中返回TRUE。我如何调整data.table,使其返回1/0,如果条件为TRUE,则返回1,否则返回0?我可以使用基数R或dplyr将“firstX”列中的TRUE、FALSE、NA值转换为1/0,但我想知道data.table是否有更直接的方法。我的任务如下图所示:

代码:

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 := .I == .I[stX == 'X'][1],ID]
sg3maiej

sg3maiej1#

上面的注解在我的示例中除了ID = 2之外都有效,在该示例中,“stX”列中没有X事件,因此“firstX”列返回的ID为NA m。正确计算ID = 1和3(TRUE表示为1,FALSE表示为0),因为这些ID的“stX”列中有X个事件。因此,我添加了一个小基数R来转换所有延迟NA'的到0的:

df2 <- setDT(df2)[, firstX := +(.I == .I[stX == 'X'][1]),ID] %>% replace(is.na(.), 0)

相关问题