根据使用 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)
会给你一个组列,剩下的就是过滤器。
我有一个很大的 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)
会给你一个组列,剩下的就是过滤器。