根据使用 dplyr R 的值将 data.frame 分组

break a data.frame in groups based on a value using dplyr R

我有一个很大的 data.frame (200000),我需要添加一个列用于分组,并且这些组由具有特定值的行分隔,例如

  s<-"A B C
  1 2 1
  2 22 3
  0 0 -1
  2 12 2
  0 0 -1
  20 2 5
  1 3 1
  0 2 2"
  d<-read.delim(textConnection(s),sep=" ",header=T)

C==-1是每组的断点,结果我需要3组:

  require(dplyr)

在这里我找到了分隔组的行

  mutate(d,rn=row_number()) %>% filter(C==-1) 

然后我可以构建我需要的data.frame

  bind_rows(slice(d, 1:2) %>% mutate(grp=1),slice(d,4) %>%mutate(grp=2), slice(d,6:n()) %>% mutate(grp=3)) 

如何在不对中断进行硬编码的情况下实现它?

这个怎么样:

d %>% mutate(grp = cumsum(C == -1) + 1) %>% filter(C != -1)

cumsum(C == -1) 会给你一个组列,剩下的就是过滤器。