Поиск нечисловых данных в кадре или векторе R данных

Я прочитал несколько длинных данных с read.csv(), и, к моему удивлению, данные выходят как факторы, а не числа, поэтому я предполагаю, что в данных должен быть хотя бы один нечисловой элемент, Как я могу найти, где находятся эти элементы?

Например, если у меня есть следующий фрейм данных:

df <- data.frame(c(1,2,3,4,"five",6,7,8,"nine",10))

Я хотел бы знать, что строки 5 и 9 имеют нечисловые данные. Как мне это сделать?

Ответ 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))
}