2016-07-04 80 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")][]