Ответ 1
df <- data.frame(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))
}