df <- data.frame(x = c(1,2,3,4,"five",6,7,8,"nine",10))
诀窍是知道通过转换为数字as.numeric(as.character(.))
将非数字转换为NA
.
which(is.na(as.numeric(as.character(df[[1]]))))
## 5 9
(只是使用as.numeric(df[[1]])
不起作用 - 它只是降低级别而留下数字代码)。
您可以选择抑制警告:
which.nonnum <- function(x) {
which(is.na(suppressWarnings(as.numeric(as.character(x)))))
}
which.nonnum(df[[1]])
为了更加小心,您还应该检查转换前的值是否不是 NA:
which.nonnum <- function(x) {
badNum <- is.na(suppressWarnings(as.numeric(as.character(x))))
which(badNum & !is.na(x))
}
lapply(df, which.nonnum)
将报告数据框所有列的“错误”值。