2016-07-04 4 views
1

Я хочу сломать dataframe («входной файл») на 2 части (A и B, где B (не A)). Прямо сейчас, когда, похоже, связаны разные subset() звонки и два предложения dplyr.R dplyr subset alternative

Вот что у меня есть сейчас, что это хорошо, но требует двух проходов:

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")][]