使用dplyr R按值将数据框分成组。

3

我有一个大的数据框(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) 

然后我可以构建我所需的数据框

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

如何避免硬编码换行符?

1个回答

4
这个怎么样:
d %>% mutate(grp = cumsum(C == -1) + 1) %>% filter(C != -1)

cumsum(C == -1)会给你一个分组列,接下来只需要进行筛选。


3
非常好。在R语言中,相应的代码为:transform(d, group=cumsum(C==-1) + 1)[d$C != -1,]。翻译完成,没有其他内容返回。 - thelatemail

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接