2016-05-29 15 views
0

從網上搜索這組列,好像這應該工作:得到錯誤R中嘗試計算意味着在包含NA

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

不過,我得到的是:

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

這是在數據集中該列的內容:

> 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 

我有些心慌。

+2

'class(r_lab $ ozone)'的結果是什麼? –

+1

請爲人們添加一個[可重現的示例](http://stackoverflow.com/q/5963269/1217536)。當我將你的值賦給一個vector並運行你的代碼時,我得到一個平均值和沒有錯誤。 – gung

+1

它可能是一個因子列。轉換爲數字,它會工作。即「平均(as.numeric(as.character(r_lab $ ozone)),na.rm = TRUE)' – akrun

回答

3

您的數據最有可能是類character,而不是數字。

這些例子看看:

# 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 

但是,如果你的數據是character類的,那麼你得到你所報告的錯誤消息:

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 

所以,你應該轉換數據以數字開頭,然後取平均值:

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

[1] 18.13043 
+1

唯一的問題是'as.character(x)'在每個條目周圍顯示雙引號。這不是OP發佈的內容。 – RHertel

+0

@RHertel誰知道OP發佈的內容 - 沒有可重複的例子,所以這都是猜測工作,是不是。在他上次更新後,他似乎只是拼寫錯誤。不過,這個答案很可能是真正發生的事情。 – Andrie

0

我不知道R是大小寫敏感我有。

理查德是對的,我應該使用臭氧,而不是臭氧。感謝大家的幫助。

對不起,我不知道如何提供可重複的數據。在這種情況下什麼是足夠的?

+1

複製並粘貼'dput()'函數的結果。這是可重複的代碼。 –

+0

看看我的答案,我的例子可以重現。 – Andrie

+0

您可以在我最初提供的[link](http://stackoverflow.com/q/5963269/1217536)中學習如何提供可重複使用的示例。這就是我提供它的原因。 – gung