我有以下问题,我找不到任何简单的解决方案.
我想在向量中找到非零元素组(由至少一个零分隔)并为每个组分配一个id(后续整数).例如,在向量value <- c(1,1,2,3,4,3,0,0,0,1,2,3,9,8,0,0,3,2)中应该有三组:[1,1,2,3,4,3],[1,2,3,9,8],[3,2],所以我想获得这样的数据框:
value id
1 1 1
2 1 1
3 2 1
4 3 1
5 4 1
6 3 1
7 0 NA
8 0 NA
9 0 NA
10 1 2
11 2 2
12 3 2
13 9 2
14 8 2
15 0 NA
16 0 NA
17 3 3
18 2 3
Run Code Online (Sandbox Code Playgroud)
nic*_*ola 11
你可以试试:
as.integer(factor(cumsum(value==0)*NA^(value==0)))
#[1] 1 1 1 1 1 1 NA NA NA 2 2 2 2 2 NA NA 3 3
Run Code Online (Sandbox Code Playgroud)
用rle().首先创建一个用NA替换零的新向量.
x <- match(value != 0, TRUE)
with(rle(!is.na(x)), {
lv <- lengths[values]
replace(x, !is.na(x), rep(seq_along(lv), lv))
})
# [1] 1 1 1 1 1 1 NA NA NA 2 2 2 2 2 NA NA 3 3
Run Code Online (Sandbox Code Playgroud)