2017-02-22 4 views
1

Ich würde einen Datensatz dynamisch unterteilen und eine Analyse mit einer festen Variablen und sequentiell Bedingung für die anderen Variablen durchführen. Nehmen wir zum Beispiel sagen, dass ich eine 3 variablen Datenrahmen (in meinem Fall habe ich 10):Dynamisch Teilmenge Datenrahmen durch einen bedingten Satz

x y z 
a 1 1 
b 3 NA 
NA 5 0 
f NA 1 

ich den Datenrahmen Anlage auf 1) x der Teilmenge wollen, fehlen z nicht
2) y, z fehlen nicht

Meine targetted Ausgabe ist dies: dynamisch über alle meine Datensatz mit n Anzahl der Variablen

x z 
a 1 
f 1 

y z 
1 1 
5 0 

ich diese paarweise Vergleich durchgeführt werden soll. Die Ausgabe kann eine Liste sein.

+0

Mögliche Duplikat http://stackoverflow.com/questions/37192961/applying-combn-function-to-data-frame – akrun

Antwort

2

Wir verwenden combn, dann Schleife, Subset-and-Drop NA Reihen:

# dummy data 
df1 <- read.table(text = "x y z 
a 1 1 
        b 3 NA 
        NA 5 0 
        f NA 1", header = TRUE) 
# result 
apply(combn(colnames(df1), 2), 2, function(i){ 
    res <- df1[, i] 
    res[complete.cases(res), ] 
    }) 
# [[1]] 
# x y 
# 1 a 1 
# 2 b 3 
# 
# [[2]] 
# x z 
# 1 a 1 
# 4 f 1 
# 
# [[3]] 
# y z 
# 1 1 1 
# 3 5 0 
+1

oder ähnlich, 'lapply (combn (Namen (df), 2, FUN = Liste), Funktion (x) na.omit (df [, x]))' –

+0

@docendodiscimus netter Trick mit Spaß. Seltsam, dass ich bei 'complete.cases' stecken geblieben bin, obwohl ich von' na.omit' weiß. – zx8754

Verwandte Themen