Comment convertir une colonne de structure de données d’un type numérique ?
Réponses
Trop de publicités?Depuis (encore) personne n'a pu vérifier la marque, je suppose que vous avez une question pratique à l'esprit, surtout parce que vous n'avez pas spécifié de quel type de vecteur vous souhaitez convertir en numeric
. Je suggère que vous devriez appliquer transform
de la fonction, afin de terminer votre tâche.
Maintenant, je suis sur le point de démontrer certaines "conversion anomalie":
# create dummy data.frame
d <- data.frame(char = letters[1:5],
fake_char = as.character(1:5),
fac = factor(1:5),
char_fac = factor(letters[1:5]),
num = 1:5, stringsAsFactors = FALSE)
Laissez-nous jeter un coup d'œil à l' data.frame
> d
char fake_char fac char_fac num
1 a 1 1 a 1
2 b 2 2 b 2
3 c 3 3 c 3
4 d 4 4 d 4
5 e 5 5 e 5
et courons:
> sapply(d, mode)
char fake_char fac char_fac num
"character" "character" "numeric" "numeric" "numeric"
> sapply(d, class)
char fake_char fac char_fac num
"character" "character" "factor" "factor" "integer"
Maintenant vous avez probablement vous demandez-vous "Où une anomalie?" Eh bien, je l'ai croisé tout à fait étrange, les choses dans R, et ce n'est pas la plus de confusion chose, mais il peut vous confondre, surtout si vous lisez ceci avant de rouler dans le lit.
Va ici: les deux premières colonnes sont character
. J'ai délibérément appelé 2nd un fake_char
. Spot la similitude de ce character
variable avec un que Dirk créé dans sa réponse. C'est en fait un numerical
vecteur converti character
. 3rd et 4ème colonne factor
, et le dernier est "purement" numeric
.
Si vous utilisez l' transform
fonction, vous pouvez convertir l' fake_char
en numeric
, mais pas l' char
variable elle-même.
> transform(d, char = as.numeric(char))
char fake_char fac char_fac num
1 NA 1 1 a 1
2 NA 2 2 b 2
3 NA 3 3 c 3
4 NA 4 4 d 4
5 NA 5 5 e 5
Warning message:
In eval(expr, envir, enclos) : NAs introduced by coercion
mais si vous faites la même chose sur fake_char
et char_fac
, vous aurez de la chance, et sortir avec aucun NA:
> transform(d, fake_char = as.numeric(fake_char),
char_fac = as.numeric(char_fac))
char fake_char fac char_fac num
1 a 1 1 1 1
2 b 2 2 2 2
3 c 3 3 3 3
4 d 4 4 4 4
5 e 5 5 5 5
Si vous enregistrez transformé data.frame
et vérifiez mode
et class
, vous obtiendrez:
> D <- transform(d, fake_char = as.numeric(fake_char),
char_fac = as.numeric(char_fac))
> sapply(D, mode)
char fake_char fac char_fac num
"character" "numeric" "numeric" "numeric" "numeric"
> sapply(D, class)
char fake_char fac char_fac num
"character" "numeric" "factor" "numeric" "integer"
Donc, la conclusion est: Oui, vous pouvez convertir character
vecteur dans un numeric
, mais seulement si c'est des éléments sont des "convertibles" numeric
. Si il y a juste un character
élément dans le vecteur, vous obtiendrez d'erreur lorsque vous tentez de convertir un vecteur en numerical
.
Et, juste pour prouver mon point:
> err <- c(1, "b", 3, 4, "e")
> mode(err)
[1] "character"
> class(err)
[1] "character"
> char <- as.numeric(err)
Warning message:
NAs introduced by coercion
> char
[1] 1 NA 3 4 NA
Et maintenant, juste pour le plaisir (ou la pratique), d'essayer de deviner le résultat de ces commandes:
> fac <- as.factor(err)
> fac
???
> num <- as.numeric(fac)
> num
???
Salutations à Patrick Burns! =)