J'ai lu des données volumineuses avec read.csv () et, à ma grande surprise, les données apparaissent sous forme de facteurs plutôt que de chiffres. Je suppose donc qu'il doit y avoir au moins un élément non numérique dans les données. Comment puis-je trouver où se trouvent ces articles?
Par exemple, si j'ai le cadre de données suivant:
df <- data.frame(c(1,2,3,4,"five",6,7,8,"nine",10))
J'aimerais savoir que les lignes 5 et 9 contiennent des données non numériques. Comment je ferais ça?
df <- data.frame(c(1,2,3,4,"five",6,7,8,"nine",10))
L'astuce consiste à savoir que la conversion en numérique via as.numeric(as.character(.))
convertira les non-nombres en NA
.
which(is.na(as.numeric(as.character(df[[1]]))))
## 5 9
(utiliser simplement as.numeric(df[[1]])
ne fonctionne pas - cela supprime simplement les niveaux en laissant les codes numériques).
Vous pouvez choisir de supprimer les avertissements:
which.nonnum <- function(x) {
which(is.na(suppressWarnings(as.numeric(as.character(x)))))
}
which.nonnum(df[[1]])
Pour faire plus attention, vous devriez également vérifier que les valeurs n'étaient pas NA avant la conversion:
which.nonnum <- function(x) {
badNum <- is.na(suppressWarnings(as.numeric(as.character(x))))
which(badNum & !is.na(x))
}
Une alternative pourrait être de vérifier quelles entrées du vecteur contiennent des caractères autres qu'un nombre:
df <- data.frame(c(1,2,3,4,"five",6,7,8,"nine",10))
which(!grepl('^[0-9]',df[[1]]))
## 5 9