2016-06-01 7 views
1

Ich habe eine Liste von Variablen in Folge und ich fragte mich, ob es eine einfache Möglichkeit der Unterteilung in dplyr mit gleichen Bedingungen in der Reihenfolge der Variablen gab.Wie in dplyr mit den gleichen Bedingungen unter mehreren Variablen Teilmenge

Zum Beispiel habe ich die folgenden Variablen:

DX1 DX2 DX3 DX4 DX5

ich eine Teilmenge meiner Daten mögen würde, wenn eine dieser Variablen enthält die folgende Zeichenfolge ‚7586‘ .

Subsetting aus einer einzigen Variablen ich folgendes tun würde:

filter(df, DX1 == '7586') 

Die einzige Methode, die ich denken kann, wäre die folgende:

filter(df, DX1 == '7586' | DX2 == '7586' | DX3 == '7586' | DX4 == '7586' | DX5 == '7586') 

Meine aktuelle Datensatz enthält DX1-DX25 und kann ziemlich mühsam sein zu schreiben.

Gibt es eine Methode zur Vereinfachung der oben genannten?

etwas entlang der Linien von

filter(df, DX1-25 == '7586') 

Danke

Antwort

5

zwei Optionen, eine in der Basis R, und eine in dplyr sollte das gleiche Ergebnis produzieren:

df[rowSums(df == 7586) > 0,] 

oder

library(dplyr) 
df %>% 
    filter(rowSums(. == 7586) > 0) 

und eine data.table Version für Spaß, die ein kleines bisschen mehr Geschwindigkeit bei Bedarf eek sollen:

library(data.table) 
setDT(df)[, .SD[Reduce(`+`, lapply(.SD, `==`, 7586)) > 0] ] 
+0

Vielen Dank für alle Optionen! –

1

Vielleicht so etwas wie, wenn DX1 ~ DX25 alle oder die meisten der Spalten Ihrer data.frame sind?

df[apply(df, 1, function(row) any(row == '7586')), ] 

    x y 
1 7586 322 
2 3322 7586 

Daten:

structure(list(x = structure(c(2L, 1L), .Label = c("3322", "7586" 
), class = "factor"), y = structure(1:2, .Label = c("322", "7586" 
), class = "factor")), .Names = c("x", "y"), row.names = c(NA, 
-2L), class = "data.frame") 
1
select(data, DX1:DX25) %>% apply(., 1, function(x) any(x == '7586')) %>% data[. , ] 
+1

Thank you! Das hat den Trick gemacht! –