Comment faire pour convertir un bloc de données de la colonne de type numérique?
Comment voulez-vous convertir un bloc de données de la colonne d'un type numérique?
Vous devez vous connecter pour publier un commentaire.
Comment voulez-vous convertir un bloc de données de la colonne d'un type numérique?
Vous devez vous connecter pour publier un commentaire.
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 que vous voulez convertir à
numeric
. Je suggère que vous devriez appliquertransform
fonction afin de compléter votre tâche.Maintenant, je suis sur le point de démontrer certaines "conversion anomalie":
Laissez-nous jeter un coup d'œil à
data.frame
et courons:
Maintenant vous avez probablement vous demandez-vous à ", Où une anomalie?" Bien, je l'ai croisé tout à fait étrange, les choses dans R, et ce n'est pas la la plupart 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é 2ème unfake_char
. Spot la similitude de cecharacter
variable avec un que Dirk créé dans sa réponse. C'est en fait unnumerical
vecteur converti àcharacter
. 3rd et 4ème de la colonne sontfactor
, et le dernier est "purement"numeric
.Si vous utilisez
transform
fonction, vous pouvez convertir lefake_char
ennumeric
, mais pas lechar
variable elle-même.mais si vous faites la même chose sur
fake_char
etchar_fac
, vous aurez de la chance, et sortir avec aucun NA:Si vous enregistrez transformé
data.frame
et vérifiermode
etclass
, vous obtiendrez:Donc, la conclusion est: Oui, vous pouvez convertir
character
vecteur dans unnumeric
, mais seulement si c'est des éléments sont des "convertibles" ànumeric
. Si il y a juste uncharacter
élément dans le vecteur, vous obtiendrez l'erreur quand vous essayez de convertir les vecteurs denumerical
un.Et, juste pour prouver mon point:
Et maintenant, juste pour le plaisir (ou la pratique), d'essayer de deviner le résultat de ces commandes:
Salutations à Patrick Burns! =)
Quelque chose qui m'a aidé: si vous avez des gammes de variables à convertir (ou juste plus d'un), vous pouvez utiliser
sapply
.Un peu absurde, mais juste pour exemple:
Dire les colonnes 3, 6 à 15 et 37 de vous dataframe doivent être convertis au numérique, on pourrait:
sapply
appel dansas.data.frame()
sur le côté droit, comme @Mehrad Mahmoudian suggéré ci-dessous, il va fonctionner.si
x
est le nom de la colonne de dataframedat
, etx
est de type facteur, utilisation:as.character
est en effet ce que je cherchais. Sinon, la conversion va parfois à tort. Au moins dans mon cas.Error: (list) object cannot be coerced to type 'double'
si j'étais sûr que mon vecteur a pas de caractères / ponctuations. Ensuite, j'ai essayéas.numeric(as.character(dat$x))
et cela a fonctionné. Maintenant, je ne suis pas sûr que ma colonne est en fait que des nombres entiers ou pas!J'aurais ajouté un commentaire (cant faible notation)
Juste à ajouter sur user276042 et pangratz
Cela va remplacer les valeurs existantes de la colonne x
Tim est correct, et Shane a une omission. Voici d'autres exemples:
Notre
data.frame
a maintenant un résumé du facteur de colonne (compte) et numérique des résumés de laas.numeric()
--- qui est mal comme il a obtenu le numérique facteur de niveaux --- et le (bon) résumé de laas.numeric(as.character())
.Avec le code suivant, vous pouvez convertir tous les trames de données des colonnes numériques (X est le bloc de données que vous souhaitez convertir en colonnes):
et pour la conversion de l'ensemble de la matrice en numérique, vous avez deux façons:
Soit:
ou:
Alternativement, vous pouvez utiliser
data.matrix
fonction pour convertir le tout en numérique, bien être conscient que les facteurs soient pas convertis correctement, de sorte qu'il est plus sûr de tout convertircharacter
première:J'ai l'habitude d'utiliser ce dernier si je veux à se convertir à la matrice et numériques simultanément
Alors que votre question est strictement numérique, il y a beaucoup de conversions qui sont difficiles à comprendre au début R. je vais le but d'aborder les méthodes pour aider. Cette question est similaire à Cette Question.
Type de conversion peut être une douleur dans R, parce que (1) les facteurs ne peuvent pas être directement converti en numérique, ils doivent être convertis pour le caractère de classe de première, (2) les dates sont un cas spécial que vous n'avez généralement besoin de traiter séparément, et (3) en boucle à travers le bloc de données des colonnes peut être délicat. Heureusement, le "tidyverse" a résolu la plupart des problèmes.
Cette solution utilise
mutate_each()
appliquer une fonction à toutes les colonnes d'un bloc de données. Dans ce cas, nous voulons appliquer latype.convert()
fonction qui convertit les chaînes en numérique, où il peut. Parce que les R aime facteurs (je ne sais pas pourquoi) les colonnes de caractères qui doit rester personnage a changé de facteur. Pour corriger cela, lemutate_if()
fonction est utilisée pour détecter les colonnes et les facteurs de changement de personnage. Enfin, j'ai voulu montrer comment lubridate peut être utilisé pour modifier un horodatage dans la classe de personnage à jour en temps parce que c'est aussi souvent un coincement de bloc pour les débutants.Si vous avez un problème avec:
Prendre un coup d'oeil à vos marques décimales. Si ils sont "," au lieu de "." (par exemple, "5,3") ci-dessus ne fonctionne pas.
Une solution possible est:
Je crois que c'est assez commun dans certaines non les pays de langue anglaise.
De façon universelle à l'aide de
type.convert()
etrapply()
:as.is = TRUE
si vous voulez convertir votre personnage soit numérique ou des facteursmatrix
numérique changementsclasses=matrix
erronées premier argument doit être de la mode de caractèrePour convertir un bloc de données de la colonne est numérique, vous avez juste à faire:-
facteur numérique:-
sapply(data_frame,function(x) as.numeric(as.character(x)))
Si d'autres ont couvert le sujet assez bien, je voudrais ajouter ce supplément de pensée rapide/hint. Vous pouvez utiliser les regexp de vérifier à l'avance si les caractères potentiellement se composer uniquement de chiffres.
Pour les plus sophistiquées des expressions régulières et soigné pourquoi à apprendre de l'expérience de leur pouvoir voir cette très belle site web: http://regexr.com/
Dans mon PC (R v. 3.2.3),
apply
ousapply
donner d'erreur.lapply
fonctionne bien.Pour convertir les caractères numériques, vous devez le convertir en facteur en appliquant
Que vous avez à faire deux colonnes avec les mêmes données, car une colonne ne peut pas convertir en numérique. Si vous effectuez une conversion, il donne l'erreur ci-dessous
donc, après avoir fait deux colonnes de données s'appliquent
il va transformer le caractère numérique avec succès
Si le dataframe a plusieurs types de colonnes, de certains personnages, certaines numérique essayez ce qui suit pour convertir uniquement les colonnes qui contiennent des valeurs numériques numériques:
avec hablar::convertir
De les convertir facilement en plusieurs colonnes à différents types de données que vous pouvez utiliser
hablar::convert
. La syntaxe est Simple:df %>% convert(num(a))
convertit la colonne a de df numérique.Exemple détaillé
Vous permet de convertir toutes les colonnes de
mtcars
de caractère.Avec
hablar::convert
:résultats dans:
Compte tenu de l'existence éventuelle d'colonnes de type char, c'est basé sur @Abdou dans Obtenir les types de colonne de la feuille excel automatiquement réponse: