2016-07-04 17 views
1

Ich möchte einen Datenrahmen ("Eingabedatei") in 2 Teile (A und B, wo B ist (nicht A)) brechen. Gerade jetzt scheint das verschiedene subset() Aufrufe und zwei dplyr Sätze zu beinhalten. HierR dplyr Subset Alternative

ist, was ich habe jetzt, was in Ordnung ist, aber erfordert zwei Durchgänge:

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) 

Gibt es eine Möglichkeit, dies zu tun:

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

, so dass, wenn die Bedingung wahr ist der Datensatz würde zu Datenrahmen A fließen, und wenn die Bedingung falsch wäre, würde sie zu B fließen?

+1

Sie suchen nach 'group_by', was das Teilen überflüssig macht. In diesem Fall etwas wie 'mtcars%>% add_rownames ('auto')%>% group_by (group = grepl ('Mazda', auto))' ' – alistaire

Antwort

0

split ist ein Weg, um zu gehen, die in eine Liste von zwei Unterdatenrahmen basierend auf dem Zustand Datenrahmen unterteilt:

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

Ohne das stringr Paket, grepl sollte hier für Ihren Fall genug sein:

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

Wir können eine Gruppenvariable erstellen mit data.table

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