Je travaille sur une trame de données composée de plusieurs types de données différents (numériques, caractères, horodatages), mais malheureusement toutes sont reçues en tant que caractères. Par conséquent, j'ai besoin de les contraindre dans leur format "approprié" dynamiquement et aussi efficacement que possible.Coercition de variables dans la trame de données au format approprié
Prenons l'exemple suivant:
df <- data.frame("val1" = c("1","2","3","4"), "val2" = c("A", "B", "C", "D"), stringsAsFactors = FALSE)
Je veux évidemment val1
être numériques et val2
de rester comme un personnage. Par conséquent, mon résultat devrait ressembler à ceci:
'data.frame': 4 obs. of 2 variables:
$ val1: num 1 2 3 4
$ val2: chr "A" "B" "C" "D"
En ce moment je suis en train d'accomplir ceci en vérifiant si la contrainte entraînerait NULL
et procédant si cela est contraindre pas le cas:
res <- as.data.frame(lapply(df, function(x){
x <- sapply(x, function(y) {
if (is.na(as.numeric(y))) {
return(y)
} else {
y <- as.numeric(y)
return(y)
}
})
return(x)
}), stringsAsFactors = FALSE)
Cependant, cela ne me paraît pas la bonne solution en raison de multiples problèmes:
- je soupçonne qu'il ya un moyen plus rapide d'y parvenir
- Pour une raison quelconque, je reçois l'avertissement
In FUN(X[[i]], ...) : NAs introduced by coercion
, bien que ce n'est pas le cas (voir le résultat) - Cela semble inappropriée lors de la manipulation d'autres types de données, à savoir dates
Y at-il une approche générale, heuristique ceci, ou une autre solution plus durable? Merci
'data.frame (lapply (df, type.convert)) bibliothèque' '** ou ** (readr); data.frame (lapply (df, fonction (x) parse_guess (x))) 'peut fonctionner mais je ne suis pas sûr –