r-如果其他列从FALSE移动到TRUE,则按组创建值为TRUE的列



我有如下数据:

library(stringi)
datfake <- as.data.frame(runif(100, 0, 3000))
names(datfake)[1] <- "Inc"
datfake$type <- sample(LETTERS, 100, replace = TRUE)
datfake$province <- stri_rand_strings(100, 1, "[A-P]")
datfake$non_response <- sample(rep(c("TRUE","FALSE"),each=50),100,replace=FALSE)
Inc type province non_response
1    693.55581    R        H        FALSE
2   2539.40434    X        B        FALSE
3    990.16946    W        I        FALSE
4    208.33514    W        I         TRUE
5   1600.92130    X        P        FALSE

如果typeFALSE切换到TRUE,我想创建一个列new_col,它是TRUE(仅此而已(。我想做:

setDT(datfake)
datfake <- setDT(datfake)[non_response != shift(non_response), new_col:= TRUE,  by=type]

代码运行,但有两个问题:

  1. 它不符合类型。

  2. 按照我写的方式,如果从TRUEFALSE,它也是TRUE

    Inc type province non_response           new_col
    1:  693.55581    R        H        FALSE               NA
    2: 2539.40434    X        B        FALSE               NA
    3:  990.16946    W        I        FALSE               NA
    4:  208.33514    W        I         TRUE             TRUE
    5: 1600.92130    X        P        FALSE             TRUE
    

所需输出:

在第4行中,对于类型W,non_response从FALSE更改为TRUE,因此在这种情况下,new_col应为TRUE。

在所有其他情况下,它都应该是假的。

因此,前一个输出中的最后一行是不正确的,因为第2行中的X也是FALSE。因此,如果我的尝试有new_colTRUE,那么在第5行中,它应该是false。

Inc type province non_response           new_col
1:  693.55581    R        H        FALSE               NA
2: 2539.40434    X        B        FALSE               NA
3:  990.16946    W        I        FALSE               NA
4:  208.33514    W        I         TRUE             TRUE
5: 1600.92130    X        P        FALSE             FALSE

我该怎么写?

这样的东西怎么样?

datfake[, new_col:= non_response != shift(non_response), by=type]

相关内容

最新更新