我想知道在测试条件时,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]
1条答案
按热度按时间sg3maiej1#
上面的注解在我的示例中除了ID = 2之外都有效,在该示例中,“stX”列中没有X事件,因此“firstX”列返回的ID为NA m。正确计算ID = 1和3(TRUE表示为1,FALSE表示为0),因为这些ID的“stX”列中有X个事件。因此,我添加了一个小基数R来转换所有延迟NA'的到0的: