Avoiding NAs in as.numeric()

r na
Selvam picture Selvam · Oct 23, 2012 · Viewed 38.1k times · Source

If I did this, I get correct result:

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

But if there is NAs in the vector, then there is a problem

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

Answer

joran picture joran · Oct 23, 2012

Two things.

First, there's a difference between the character string "NA" and the R data representation for missing values, NA. Remove the quotes around NA in your example to see:

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

Second, when you're using min with actual missing values (i.e. not the character strings "NA") you'll want to use na.rm = TRUE:

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