2012-10-23 117 views
12

如果我這樣做,我得到正確的結果:避免NAS(

a <- c("10","28","3") 
which(as.numeric(a) == min(as.numeric(a))) 
[1] 3 

但如果來港的載體,那麼還有一個問題

a <- c("10","28","3","NA") 
which(as.numeric(a) == min(as.numeric(a))) 
integer(0) 
Warning messages: 
1: In which(as.numeric(a) == min(as.numeric(a))) : 
    NAs introduced by coercion 
2: In which(as.numeric(a) == min(as.numeric(a))) : 
    NAs introduced by coercion 
+0

沒有必要在標題R,因爲你擁有了它標記爲R – mnel

回答

12

兩個的東西。

首先,字符串"NA"與缺失值的R數據表示NA之間存在差異。刪除NA左右的報價在你的例子來看看:

a <- c("10","28","3",NA) 

其次,當你使用min實際缺失值(即不是字符串"NA"),你要使用na.rm = TRUE

which(as.numeric(a) == min(as.numeric(a),na.rm = TRUE)) 
+0

你是正確地指出「不適用」。這是一個錯字。它的意思是缺失值的NA。感謝您的解決方案。 – Selvam

+1

您可能還想使用'which.min' – hadley

8

你的主要問題是沒有通話中指定na.rm = TRUEmin

numeric_a <- as.numeric(a) 

which(numeric_a == min(numeric_a, na.rm = TRUE)) 
## [1] 3 

或者您可以使用which.min,它不要求您指定應刪除NA值。這隻會給你的第一場比賽,不是所有的比賽(感謝@Dason提醒我澄清這一點)

which.min(numeric_a) 
+3

但是,如果您使用'which.min',只需注意即使有多個匹配最小值的值,您也只會得到一個結果。 – Dason

+1

mnel和Dason,非常感謝你們對這個解決方案的進一步解釋。 – Selvam