代码之家  ›  专栏  ›  技术社区  ›  Xavier Prudent

如何在R中计算和识别数据帧中的等价组

r
  •  1
  • Xavier Prudent  · 技术社区  · 6 年前

    library(dplyr)      
    d <- data.frame(x=c(0,0,1,1,0,1,1,1,0,0,1))
    

    我希望每组1都有一个唯一的id:

       x id
    1  0  0
    2  0  0
    3  1  1
    4  1  1
    5  0  0
    6  1  2
    7  1  2
    8  1  2
    9  0  0
    10 0  0
    11 1  3
    

    它可以用一个简单的循环来解决,我想避免。 我已经试过了印度组(dplyr)、动物园组(na.locf)和库姆苏姆组(cumsum),但到目前为止还没有找到解决办法。

    2 回复  |  直到 6 年前
        1
  •  1
  •   G5W    6 年前

    你可以这样做 cumsum diff

    G1 = cumsum(c(d$x[1] == 1, diff(d$x) == 1))
    d$id = ifelse(d$x==1, G1, 0)
    d
       x id
    1  0  0
    2  0  0
    3  1  1
    4  1  1
    5  0  0
    6  1  2
    7  1  2
    8  1  2
    9  0  0
    10 0  0
    11 1  3
    

    d$x[1] == 1

        2
  •  0
  •   joran    6 年前

    一种简单的基方法 rle :

    r <- rle(d$x)
    r$values[r$values == 1] <- seq_len(sum(r$values == 1))
    d$id <- rep(r$values,times = r$lengths)