15

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

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
4

2 回答 2

15

两件事情。

首先,缺失值的字符串"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))
于 2012-10-23T01:15:13.303 回答
8

您的主要问题不是na.rm = TRUE在调用中指定min

numeric_a <- as.numeric(a)

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

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

which.min(numeric_a)
于 2012-10-23T01:15:20.797 回答