これを行った場合、正しい結果が得られます。
a <- c("10","28","3")
which(as.numeric(a) == min(as.numeric(a)))
[1] 3
しかし、ベクトルにNAがある場合、問題があります。
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
2つのこと。
まず、文字列"NA"
と、欠損値のNA
のRデータ表現には違いがあります。例を見るには、NAの前後の引用符を削除してください。
a <- c("10","28","3",NA)
次に、min
をactual欠損値(つまり、文字列"NA"
ではない)で使用している場合は、na.rm = TRUE
を使用する必要があります。
which(as.numeric(a) == min(as.numeric(a),na.rm = TRUE))
主な問題は、min
の呼び出し内でna.rm = TRUE
を指定していないことです
numeric_a <- as.numeric(a)
which(numeric_a == min(numeric_a, na.rm = TRUE))
## [1] 3
または、NA値を削除するように指定する必要のないwhich.min
を使用できます。これにより、すべての一致ではなく、最初の一致のみが提供されます(これを明確にするように通知してくれた@Dasonに感謝)
which.min(numeric_a)