2016-05-29 19 views
0

Von Online-Suche und in dieser Gruppe, so scheint es so funktionieren sollte:Erste Fehler in R versuchen, auf Spalte zu berechnen bedeutet, dass NA enthält

> mean(r_lab$ozone, na.rm=TRUE) 

Doch was ich bekommen ist:

[1] NA 
Warning message: 
In mean.default(r_lab$ozone, na.rm = TRUE) : 
    argument is not numeric or logical: returning NA 

Dies ist der Inhalt dieser Spalte im Datensatz:

> r_lab$Ozone 
[1] 41 36 12 18 NA 28 23 19 8 NA 7 16 11 14 
[15] 18 14 34 6 30 11 1 11 4 32 NA NA NA 23 

Ich bin irgendwie nervös.

+2

Was ist das Ergebnis von 'class (r_lab $ ozone)'? –

+1

Fügen Sie ein [reproduzierbares Beispiel] (http://stackoverflow.com/q/5963269/1217536) hinzu, mit dem die Leute arbeiten können. Wenn ich deine Werte einem Vektor zuweise und deinen Code ausführst, erhalte ich einen mittleren & keinen Fehler. – gung

+1

Es könnte eine Faktor Spalte sein. In numerische konvertieren und es würde funktionieren. dh 'mean (as.numeric (as.character (r_lab $ ozone)), na.rm = TRUE)' – akrun

Antwort

3

Ihre Daten sind höchstwahrscheinlich der Klasse character, anstatt numerisch.

Werfen Sie einen Blick auf diese Beispiele:

# Set up some numeric data 
x <- c(41, 36, 12, 18, NA, 28, 23, 19, 8, NA, 7, 16, 11, 14, 18, 14, 34, 6, 30, 11, 1, 11, 4, 32, NA, NA, NA, 23) 

# Clearly taking the mean on this will work 
mean(x, na.rm = TRUE) 

[1] 18.13043 

Allerdings, wenn Ihre Daten der Klasse ist character, dann erhalten Sie die Fehlermeldung, die Sie berichten:

y <- as.character(x) 
mean(y, na.rm = TRUE) 

[1] NA 
Warning message: 
In mean.default(y, na.rm = TRUE) : 
    argument is not numeric or logical: returning NA 

So sollten Sie Ihre Daten konvertieren zu numerisch zuerst, dann den Durchschnitt nehmen:

mean(as.numeric(x), na.rm = TRUE) 

[1] 18.13043 
+1

Das einzige Problem ist, dass 'as.character (x)' mit doppelten Anführungszeichen um jeden Eintrag angezeigt wird. Dies ist nicht das, was das OP gepostet hat. – RHertel

+0

@RHertel Wer weiß, was das OP gepostet hat - kein reproduzierbares Beispiel, also ist alles raten, nicht wahr? Nach seinem letzten Update scheint er einfach einen Rechtschreibfehler gemacht zu haben. Dennoch ist diese Antwort wahrscheinlich, was wirklich passiert ist. – Andrie

0

Ich war nicht bewusst, dass R Fall-sensible war Ich habe.

Richard hatte Recht, ich hätte Ozon, nicht Ozon verwenden sollen. Danke an alle für ihre Hilfe.

Entschuldigung, ich wusste nicht, wie man reproduzierbare Daten zur Verfügung stellt. Was wäre in diesem Fall ausreichend gewesen?

+1

Kopieren Sie das Ergebnis aus der Funktion 'dput()' und fügen Sie es ein. Das ist der reproduzierbare Code. –

+0

Schau dir meine Antwort an, wo ich dein Beispiel reproduzierbar gemacht habe. – Andrie

+0

Sie können lernen, wie Sie ein reproduzierbares Beispiel in der [link] (http://stackoverflow.com/q/5963269/1217536) bereitstellen, die ich ursprünglich zur Verfügung gestellt habe. Deshalb habe ich es zur Verfügung gestellt. – gung