使用R查找非零元素组

qua*_*doo 6 grouping r vector

我有以下问题,我找不到任何简单的解决方案.

我想在向量中找到非零元素组(由至少一个零分隔)并为每个组分配一个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)

  • 使用`c()`的属性删除功能来替换`as.integer()`.前面! (2认同)

Ric*_*ven 6

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)