sollten Diese
arbeiten
df[,sapply(df,function(V) sum(V==0)==0)]
EDIT
Der obige Code natürlich für alle numerischen Spalten funktionieren sollte, aber was Faktor Spalten oder Zeichenspalten mit „0“ ist, wir haben die gleiche erwartetes Verhalten? Wir können ein paar Tests durchführen:
factor(letters[1:5]) == 0
# FALSE FALSE FALSE FALSE FALSE
factor(c(0:5)) == 0
# TRUE FALSE FALSE FALSE FALSE FALSE
as.character(c(0:5)) == 0
# TRUE FALSE FALSE FALSE FALSE FALSE
c(0,letters[1:5]) == 0
# TRUE FALSE FALSE FALSE FALSE FALSE
factor(c(0,letters[1:5])) == 0
# TRUE FALSE FALSE FALSE FALSE FALSE
Was passiert ist, dass R 0
(numerisch) auf der RHS in "0"
(Zeichen) und auch den Faktor Spalte auf der LHS in Zeichen umwandeln. Daher sollte der Code im Allgemeinen gut funktionieren, wenn Sie wirklich jede Spalte mit "0" entfernen wollen, egal, ob es sich um eine Zahl oder ein Zeichen handelt. Aber wenn die Absicht ist, immer die Zeichen- oder Faktorspalte beizubehalten, dann könnte etw so etwas helfen:
df[,sapply(df,function(V) sum(V==0)==0 | is.character(V) | is.factor(V))]
In Ihrem 'df' gibt es einige Spalten, die nicht numerisch sind. Sie müssen sie entfernen, bevor Sie 'colSums' anwenden. Um die Klasse der Spalten in Ihrem 'df' zu überprüfen, tun Sie' str (df) 'und ignorieren Sie die Spalten, die nicht numerischer Natur sind. –