As.integer transforme la colonne en NAs

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Hugo Pirson
Messages : 11
Enregistré le : 08 Juin 2022, 16:33

As.integer transforme la colonne en NAs

Messagepar Hugo Pirson » 14 Déc 2023, 20:20

Bonjour à tous !

En voulant transformer le type des colonnes de mon data frame (de numeric à integer) je rencontre plusieurs difficultés.

La première
Ayant une 30aine de colonnes, j'aimerais utiliser la fonction as.integer pour toutes les colonnes. J'ai essayé la fonction lapply sans succès... Avez-vous des alternatives ?

La deuxième
Quand j'essaie colonne par colonne, une erreur se produit et toutes les observations se transforment en NAs. Il me semble que c'est à cause de plusieurs "0.000" que la machine a du mal à transformer en integer. Pour rappel dans mon DF il n'y a que des données numériques avec plusieurs décimales. Mon but étant de les transformer en integer simple (en supprimant les décimales donc).

Merci d'avance !
Hugo

Bertrand Vassor
Messages : 46
Enregistré le : 18 Sep 2017, 10:18

Re: As.integer transforme la colonne en NAs

Messagepar Bertrand Vassor » 15 Déc 2023, 11:45

Bonjour,

est-ce que trunc() ne fonctionne pas ?

Hugo Pirson
Messages : 11
Enregistré le : 08 Juin 2022, 16:33

Re: As.integer transforme la colonne en NAs

Messagepar Hugo Pirson » 15 Déc 2023, 12:24

Bonjour,

J'ai essayé avec la fonction trunc() qui m'a bien arrondi toute ma colonne à l'unité la plus proche. La variable reste numérique donc j'applique la fonction as.integer pour la transformer, et même erreur :

NAs introduits lors de la conversion automatique


Est-ce qu'il n'y a pas une précision à écrire dans mon écriture pour dire à la machine : "en cas de 0, laisser 0" (car il s'agit du chiffre 0 en tant que tel et pas d'un manque de données ou d'une erreur dans la table) ?

Bertrand Vassor
Messages : 46
Enregistré le : 18 Sep 2017, 10:18

Re: As.integer transforme la colonne en NAs

Messagepar Bertrand Vassor » 15 Déc 2023, 13:25

re-bonjour,

si j'ai bien compris ton problème, peut être que le code suivant peut être une partie de la solution :

Code : Tout sélectionner

set.seed(7)

df <- data.frame(var1 = rnorm(10))
df$var2 <- trunc(df$var1)
df$var3 <- as.integer(df$var2)

str(df)


[edit] le passage par la variable var2 me semble inutile après un test. Le code serait :

Code : Tout sélectionner

set.seed(7)

df <- data.frame(var1 = rnorm(10))
df$var3 <- as.integer(df$var1)

str(df)

Hugo Pirson
Messages : 11
Enregistré le : 08 Juin 2022, 16:33

Re: As.integer transforme la colonne en NAs

Messagepar Hugo Pirson » 15 Déc 2023, 14:11

Re,

Je ne comprends pas bien ce qui diffère d'un simple as.integer ?
Je vois que vous générez une colonne d'entités numériques aléatoires, mais la transformation de la variable de num à int semble être celle où j'ai eu une erreur.

Y a-t-il un élément que je manque dans votre explication ?
Merci pour le coup de main !

Bertrand Vassor
Messages : 46
Enregistré le : 18 Sep 2017, 10:18

Re: As.integer transforme la colonne en NAs

Messagepar Bertrand Vassor » 15 Déc 2023, 16:18

Re,

normalement l'ECM fait devrait fonctionner chez toi ? Est-ce le cas ?

Code : Tout sélectionner

set.seed(7)

df <- data.frame(var1 = rnorm(10))
df$var3 <- as.integer(df$var1)

str(df)

Hugo Pirson
Messages : 11
Enregistré le : 08 Juin 2022, 16:33

Re: As.integer transforme la colonne en NAs

Messagepar Hugo Pirson » 15 Déc 2023, 16:57

Pardon je ne comprends pas la question ?

Bertrand Vassor
Messages : 46
Enregistré le : 18 Sep 2017, 10:18

Re: As.integer transforme la colonne en NAs

Messagepar Bertrand Vassor » 15 Déc 2023, 17:12

L'ECM (exemple complet minimal) à pour but de réduire au strict nécessaire le code pour déterminer d'où vient l'anomalie.

L'exemple que j'ai transmis permet :
1) de vérifier de ton coté que j'ai bien compris ton problème,
2) de vérifier sur ta machine, si l'exemple fonctionne ou non. En fonction de la réponse donnée par R, cela permettra d'orienter les recherches.

Est-ce plus clair pour toi ?

Hugo Pirson
Messages : 11
Enregistré le : 08 Juin 2022, 16:33

Re: As.integer transforme la colonne en NAs

Messagepar Hugo Pirson » 18 Déc 2023, 14:23

Bonjour,

D'accord merci.
Ton code fonctionne bien chez moi, et oui il s'agit de ce problème-ci, avec Var1 étant une variable continue avec de nombreux 0. C'est cette variable que je n'arrive pas à transformer en integer.

Bertrand Vassor
Messages : 46
Enregistré le : 18 Sep 2017, 10:18

Re: As.integer transforme la colonne en NAs

Messagepar Bertrand Vassor » 18 Déc 2023, 16:04

Bonjour,

si le code fonctionne, on peut supposer que ce sont les données qui posent un problème. Peux-tu mettre 3 ou 4 données qui ne donnent pas le résultat attendu en nous indiquant celles qui posent problèmes et celle qui fonctionne bien ?

Hugo Pirson
Messages : 11
Enregistré le : 08 Juin 2022, 16:33

Re: As.integer transforme la colonne en NAs

Messagepar Hugo Pirson » 18 Déc 2023, 16:46

En réessayant de plusieurs manière différentes, je viens de me rendre compte de ceci :

-Lorsque je veux transformer le num en int en passant par Dplyr et la fonction Mutate il me met en erreur que NAs ont été introduit automatiquement :

Code : Tout sélectionner

test=test %>%
+   mutate("DTIR-101" = as.integer("DTIR-101"))


-Alors que lorsque j'essaie en R Base, la conversion se fait sans problème :

Code : Tout sélectionner

> test$`DTIR-101`=as.integer(test$`DTIR-101`)


Dans un premier temps j'aimerais comprendre pourquoi le mutate ne fonctionne pas sachant que je l'ai utilisé à plusieurs reprises dans le passé pour faire la même chose.

De plus, si nous restons sur R Base comment pouvons nous appliquer cette fonction à toutes les colonnes sans écrire trop de lignes ? Il me semble que la fonction apply irait bien...

Merci encore
Hugo

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: As.integer transforme la colonne en NAs

Messagepar Logez Maxime » 19 Déc 2023, 16:32

Bonjour,

Parce que ce sont des logiques différentes. Quand tu fais test %>% mutate("DTIR-101" = as.integer("DTIR-101")) tu ne fais pas appel à la variable (colonne) DTIR-101 mais à la chaîne de caractère "DTIR-101", et transformer cette chaîne de caractères en nombre, ce n'est juste pas possible.
Par contre si tu fais test %>% mutate(DTIR-101 = as.integer(DTIR-101)) alors là ça peut fonctionner. On ne fait pas appel à des variables en mettant un nom entre quotes (guillemets) avec dplyr, alors que dans la version de base de R, si tu veux extraire une colonne en se servant de son nom alors oui tu vas pouvoir utiliser des quotes:
- soit test["DTR-101"] si test est un data.frame
- soit test[, "DTR-101"] si test est un data.frame ou une matric ou un array
- soit test$'DTR-101' si test est un data.frame

En R de base tu peux faire, test[] <- lapply(test, as.integer)

Bien cordialement,
Maxime

Hugo Pirson
Messages : 11
Enregistré le : 08 Juin 2022, 16:33

Re: As.integer transforme la colonne en NAs

Messagepar Hugo Pirson » 19 Déc 2023, 20:03

Bonjour Maxime,

Merci pour ta réponse. En effet il s'agissait de ma syntaxe erronée avec les quotes en trop... Merci pour l'explication et les détails qui vont avec !

Bien cordialement
Hugo Pirson


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité

cron