2013-10-03 8 views
6

Ich versuche, einen Datensatz in Teile zu trennen, die Faktorvariablen und Nicht-Faktorvariablen haben.R sapply is.factor

Ich bin auf der Suche nach so etwas wie:

Dieses Teil funktioniert:

factorCols <- sapply(df1, is.factor) 
factorDf <- df1[,factorCols] 

Dieser Teil wird nicht funktionieren:

nonFactorCols <- sapply(df1, !is.factor) 

aufgrund dieses Fehlers:

Error in !is.factor : invalid argument type 

Gibt es ac richtige Weise, dies zu tun?

+1

[Relevante Frage] (http://stackoverflow.com/questions/15593934/why-cant-qnorm-in-sapply/15594648#15594648) Während die Fragen unterschiedlich genug sind, um keine Duplikate zu sein, die Gründe dahinter an ist identisch –

+0

Sie müssen wahrscheinlich nicht Ihr df in Faktor und Nicht-Faktor Spalten spalten, aber dazu gibt es ... 'lapply (split (Spaltennamen (DF), FaktorCols), Funktion (x) DF [, x, drop = FALSE]) 'von hier: http://Stackoverflow.com/a/15118036/1191259 – Frank

Antwort

8

Richtiger Weg:

nonFactorCols <- sapply(df1, function(col) !is.factor(col)) 
# or, more efficiently 
nonFactorCols <- !sapply(df1, is.factor) 
# or, even more efficiently 
nonFactorCols <- !factorCols 
+0

Vielen Dank! – screechOwl

8

Joshua gab Ihnen den richtigen Weg, es zu tun. Was warumsapply(df1, !is.factor) hat nicht funktioniert:

sapply eine Funktion erwartet. !is.factor ist keine Funktion. Der Bang-Operator gibt einen logischen Wert zurück (allerdings kann er is.factor nicht als Argument verwenden).

Alternativ können Sie Negate(is.factor) verwenden, die tatsächlich eine Funktion zurückgibt.

+1

Sehr coole Lösung mit 'Negate'! Wusste das nicht. – cryo111

Verwandte Themen