在as.numeric()中避免使用NA

Sel*_*vam 12 r na

如果我这样做,我会得到正确的结果:

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

但是如果向量中有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
Run Code Online (Sandbox Code Playgroud)

jor*_*ran 13

两件事情.

首先,字符串"NA"和缺失值的R数据表示之间存在差异NA.在示例中删除NA周围的引号,以查看:

a <- c("10","28","3",NA)
Run Code Online (Sandbox Code Playgroud)

其次,当你使用min实际缺失值(即不是字符串"NA"),你需要使用na.rm = TRUE:

which(as.numeric(a) == min(as.numeric(a),na.rm = TRUE))
Run Code Online (Sandbox Code Playgroud)


mne*_*nel 8

您的主要问题是没有na.rm = TRUE在通话中指定min

numeric_a <- as.numeric(a)

which(numeric_a == min(numeric_a, na.rm = TRUE))
## [1] 3
Run Code Online (Sandbox Code Playgroud)

或者您可以使用which.min不需要您指定应删除NA值的那些.这只会给你第一场比赛,而不是所有的比赛(感谢@Dason提醒我澄清一下)

which.min(numeric_a)
Run Code Online (Sandbox Code Playgroud)

  • 但是如果使用`which.min`,请注意即使有多个值与最小值匹配,您也只能得到一个结果. (3认同)