Bonjour,
petite question de débutant.
Voici un exemple de données (traficotées pour l'exemple).
Je dispose de deux dataframes. Le deuxième dispose de données permettant de compléter le 1er, mais aussi d'en ajouter quelques une.
J'ai donc effectué un full_join (sur X) entre les deux. J'obtiens le tableau suivant :
L'idée étant de faire fusionner V1 et V2, de manière à n'avoir plus qu'une seul colonne pour cet id.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 X V1 V2 1 D0000001 0300572 2 D0000002 7802747 3 D0000012 8402817 4 D0000013 7802747 10 D0000020 8502759 8502759 11 D0000021 8005478 8005478 12 D0000022 8100202 8100202
Quand seul l'un des deux dataframes disposait de l'info, pas de soucis. Mais quand les deux l'avaient, je me retrouve avec une case avec une concaténation des deux ids (logique).
J'avais essayé une solution à base de sprintf un peu au hasard (et je suis pas foutu de m'en rappeler, j'ai essayé d'autres trucs en écrasant les lignes dans mon script...)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 df <- tidyr::unite(df, id, V1, V2, sep = "") # Fusion des colonnes X id 1 D0000001 0300572 2 D0000002 7802747 3 D0000012 8402817 4 D0000013 7802747 10 D0000020 85027598502759 11 D0000021 80054788005478 12 D0000022 81002028100202
mais en gros, tout est apparemment de la chaine de caractère dans mon dataframe (j'avais des messages d'erreurs quand j'utilisais %i avec sprintf), j'ai donc utilisé as.integer, mais forcément, ça fait un nombre beaucoup trop grand, et R me les arrondis tous à 2147483647...
J'ai donc essayé une autre fusion avec un séparateur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 df<- tidyr::unite(df, id, V1, V2, sep = ".") # Fusion des colonnes # Ce qui me donne : X id 1 D0000001 0300572. 2 D0000002 .7802747 3 D0000012 .8402817 4 D0000013 .7802747 10 D0000020 8502759.8502759 11 D0000021 8005478.8005478 12 D0000022 8100202.8100202
De cette manière, le as.integer fonctionne, et je peux appliquer :
Les deux ids accolés sont résolus, ceux venant "de la gauche" (ligne 1) sont aussi conservé (même si il faut que je reformate pour avoir le bon nombre de chiffre, mais c'est un détail), mais en revanche, ceux venant "de la droite", étant considéré comme "après la virgule" après le as.integer, sont supprimé quand je ne conserve que la partie entière avec %d...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 df$id<- sprintf("%d", df$id) # Ce qui me donne : X id 1 D0000001 300572 2 D0000002 0 3 D0000012 0 4 D0000013 0 10 D0000020 8502759 11 D0000021 8005478 12 D0000022 8100202
Bref, je sèche un peu là.
Si vous avez une piste, une idée, je suis preneur, merci !
EDIT : bon, en fait df$id<- sprintf("%d", df$id) ne fait rien, c'est juste df$id <- as.integer(df$id) qui me donne ce que j'ai en dernier.
C'était plutôt as.double qu'il fallait faire, pour pouvoir appliquer df$id<- sprintf("%d", df$id). Ce qui, de toute façon ne change rien au problème.
Partager