如果其他列从 FALSE 变为 TRUE,则按组创建值为 TRUE 的列
Creating a column which values are TRUE, if other column moves from FALSE to TRUE, by group
我有如下数据:
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
我想创建一个列 new_col
,如果 type
从 FALSE
切换到 TRUE
(并且只有这样大约)。我想这样做:
setDT(datfake)
datfake <- setDT(datfake)[non_response != shift(non_response), new_col:= TRUE, by=type]
代码运行,但是有两个问题:
不拘类型
我这样写,从TRUE
到FALSE
也是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
。所以我的尝试在第 5 行有 new_col
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 FALSE
这个应该怎么写?
这样的事情怎么样?
datfake[, new_col:= non_response != shift(non_response), by=type]
我有如下数据:
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
我想创建一个列 new_col
,如果 type
从 FALSE
切换到 TRUE
(并且只有这样大约)。我想这样做:
setDT(datfake)
datfake <- setDT(datfake)[non_response != shift(non_response), new_col:= TRUE, by=type]
代码运行,但是有两个问题:
不拘类型
我这样写,从
TRUE
到FALSE
也是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
。所以我的尝试在第 5 行有 new_col
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 FALSE
这个应该怎么写?
这样的事情怎么样?
datfake[, new_col:= non_response != shift(non_response), by=type]