如果我这样做,我会得到正确的结果:
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)
您的主要问题是没有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)