2017-02-25 1 views
-1

Ich habe über 1000 Spalten in meinem Datenrahmen. Ich möchte eine lineare Regression für alle Variablen ausführen und möchte sie nicht einzeln schreiben. Als ich dies versuchen,So führen Sie eine lineare Regression für alle Variablen aus, wenn einige Spalten unterschiedliche Klassen haben

lm(goal ~ ., data = df) 

bekomme ich diesen Fehler:

Error in contrasts<- (*tmp* , value = contr.funs[1 + isOF[nn]]) : contrasts can be applied only to factors with 2 or more levels

ich Spalten mit Zeichenklasse haben, Faktoren, Numerik, etc. Ich ich bin zu raten, sollte Spalten entfernen, die nicht Variablen sind, können. Wie mache ich das?

+3

Dies scheint zu sagen, dass eine der Faktorvariablen, die Sie die Regression sind vorbei hat nur eine Ebene .. So ist es finden und weglassen es es. Sie finden diese durch 'sapply (d [sapply (d, is.factor)], nlevels)'; Suche nach denen mit einem Level – user20650

+1

Das scheint wie eine extrem faule Haltung. –

+0

Ist nicht faul gut? Sollten wir nicht immer etwas faul machen wollen, um mehr Zeit für andere Aktivitäten zu haben. Soll ich eigentlich 1000+ Variablen schreiben? Ich plane, zu 3000+ Variablen zu gehen. Warum sollte ich Zeit damit verschwenden, das zu schreiben? – user6452857

Antwort

2

können Sie ausschließen, die beanstandeten Variablen mit der Subtraktion - Operator

lm(goal ~ . - var, data = df) 
+0

Und um die Menge der Spalten zu finden, die auf diese Weise entfernt werden, sollten Sie nach Spalten suchen, die nur einen Wert haben. Für Numerik könnte es als Nullvarianz beschrieben werden, wird aber wahrscheinlich eine Mischung aus numerischen und Faktortypen sein. Etwas wie 'which (sapply (df, function (x) length (unique (x))) == 1)' sollte dir die zu entfernenden Spaltenindizes bringen. – vincentmajor

Verwandte Themen