2016-07-04 149 views
1

我想将一个数据帧(“inputfile”)分成两部分(A和B,其中B是(不是A))。现在,这似乎涉及不同的subset()调用和两个dplyr句子。R dplyr子集替代

这里是我现在,这是很好的,但需要两遍:

library(stringr) 

data(mtcars) 
mtcars$makemodel <-rownames(mtcars) 

mtcars%>%subset(str_detect(makemodel, "Mazda")) -> A 
mtcars%>%subset(!str_detect(makemodel, "Mazda")) -> B 

dim(A) 
dim(B) 

有没有办法做到这一点:

inputfile%>% split_data(condition, A, B) 

因此,如果条件是真实的记录会流向数据帧A,如果条件为假,它会流向B?

+1

您正在寻找'group_by',这使得分割变得不必要。在这种情况下,类似于'mtcars%>%add_rownames('car')%>%group_by(group = grepl('Mazda',car)'' – alistaire

回答

0

split是一条路可走,根据您的情况,其将数据帧分成两个子数据帧的列表:

library(stringr) 
split(mtcars, str_detect(mtcars$makemodel, "Mazda")) 

没有stringr包,grepl应该够你的情况在这里:

split(mtcars, grepl("Mazda", mtcars$makemodel)) 
0

我们可以创建一个分组变量与data.table

library(data.table) 
library(stringr) 
d1 <- copy(mtcars) 
setDT(d1, keep.rownames=TRUE)[, grp := str_detect(rn , "Mazda")][]