我有点难题要解决。
我有一个data.frame
,其中TRUE
的连续区域被一个或多个FALSE
或NA
的连续区域分隔开:
group criterium
1 A NA
2 A TRUE
3 A TRUE
4 A TRUE
5 A FALSE
6 A FALSE
7 A TRUE
8 A TRUE
9 A FALSE
10 A TRUE
11 A TRUE
12 A TRUE
13 B NA
14 B FALSE
15 B TRUE
16 B TRUE
17 B TRUE
18 B FALSE
structure(list(group = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("A",
"B"), class = "factor"), criterium = c(NA, TRUE, TRUE, TRUE,
FALSE, FALSE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, NA, FALSE,
TRUE, TRUE, TRUE, FALSE)), class = "data.frame", row.names = c(NA,
-18L))
我希望按升序排列列中的TRUE
组,同时忽略FALSE
和NA
。目标是为每个运行的TRUE
在每个group
内分配一个唯一的连续ID。
因此,结果应如下所示:
group criterium goal
1 A NA NA
2 A TRUE 1
3 A TRUE 1
4 A TRUE 1
5 A FALSE NA
6 A FALSE NA
7 A TRUE 2
8 A TRUE 2
9 A FALSE NA
10 A TRUE 3
11 A TRUE 3
12 A TRUE 3
13 B NA NA
14 B FALSE NA
15 B TRUE 1
16 B TRUE 1
17 B TRUE 1
18 B FALSE NA
我相信有一个比较简单的方法来实现这个,只是我想不出来。我尝试了dplyr
的dense_rank()
和其他窗口函数,但是都没有成功。
as.numeric(as.factor(cumsum(is.na(d$criterium^NA)) + d$criterium^NA))
-- 只需要按组应用即可。 - user20650group
进行分组或考虑group
中的不连续性。 - smci