2017-03-31 4 views
1

Ich versuche nur Faktor Spalten aus meinem Datenrahmen zu wählen. Beispiel ist unten:R - Wählen Sie nur Faktor Spalten des Datenrahmens

bank[,apply(bank[,names(bank)!="id"], is.factor)] 

Aber der Code verhält sich merkwürdig. Schritt für Schritt:

sapply(bank[,names(bank)!="id"], is.factor) 

ich:

age   sex  region  income  married children   car 
     FALSE  TRUE  TRUE  FALSE  TRUE  FALSE  TRUE 
    save_act current_act mortgage   pep  ageBin 
     TRUE  TRUE  TRUE  TRUE  TRUE 

OK Sieht aus. Nun gehe ich davon aus, dass ich diese Matrix nur von/FALSE TRUE passieren in den nächsten Schritt und erhalten nur die Spalten ich brauche:

bank[,sapply(bank[,names(bank)!="id"], is.factor)] 

Aber als Ergebnis, das ich bekommen alle die gleichen Spalten wie in der Originalbankdatenrahmen. Nichts wird herausgefiltert. Ich habe es auf die eine oder andere Weise versucht, kann aber keine Lösung finden. Irgendwelche Ratschläge, was ich falsch mache?

+0

@ d.b nur ein Datenrahmen mit einem Bündel von Spalten –

+0

@ d.b Nö, lade ich es aus csv. Nichts besonderes daran. –

+3

Sie sollten ein [reproduzierbares Beispiel] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) bereitstellen. Das wird es dir leichter machen, dir zu helfen. Die TUE/FALSE-Werte sollten mit allen Ihren Spalten übereinstimmen. Indem Sie die Spalte "id" ausschließen, verschieben Sie alles. – MrFlick

Antwort

2
#DATA 
df = mtcars 
colnames(df) = gsub("mpg","id",colnames(df)) 
df$am = as.factor(df$am) 
df$gear = as.factor(df$gear) 
df$id = as.factor(df$id) 

#Filter out 'id' after selecting factors 
df[,sapply(df, is.factor) & colnames(df) != "id"] 
+1

Danke, macht Sinn. Ich dachte nicht, dass ich "nicht ID" separat anwenden muss. –

1
df = mtcars 
colnames(df) = gsub("mpg","id",colnames(df)) 
df$am = as.factor(df$am) 
df$gear = as.factor(df$gear) 
df$id = as.factor(df$id) 

library(dplyr) 
df %>% select_if(is.factor) %>% select(-id) 
Verwandte Themen