1
votes

Supprimer les doublons de variables de data.table

J'ai des données avec plus de 6 000 colonnes. Chaque résultat a des colonnes avec des données qui sont toujours les mêmes.

   XCODE Age Sex ResultA Sex ResultB
1   X001  12   2       2       2       4
2   X002  23   2       4       2      66
3   X003  NA  NA      NA      NA      NA
4   X004  32   1       1       1       3
5   X005  NA  NA      NA      NA      NA
6   X001  NA  NA      NA      NA      NA
7   X002  NA  NA      NA      NA      NA
8   X003  33   1       8       1       6
9   X004  NA  NA      NA      NA      NA
10  X005  55   2       8       2       8

Je voudrais supprimer les doublons, par exemple la variable de sexe. Est-il possible de faire cela avec data.table?

r

0 commentaires

3 Réponses :


1
votes

Essayez ceci:

 df[, unique(colnames(df))]

Une mise en garde: cela supprimera toutes les colonnes avec des noms en double. Dans votre cas, cela supprimera Sex même si les deux colonnes ont le même nom mais un contenu différent.


0 commentaires

1
votes

Si vous avez des colonnes dupliquées avec des noms différents, vous pouvez transposer votre dataframe, ce qui vous permet d'utiliser la fonction unique pour résoudre votre problème. Ensuite, vous le transposez et le remettez en dataframe (car il s'agissait d'une matrice lorsque vous l'avez transposé).

df = data.frame(c = 1:5, a = c("A", "B","C","D","E"), b = 1:5)

df = t(df)
df = unique(df)
df = t(df)
df = data.frame(df)

Edit: comme le souligne Markus, ce n'est probablement pas une bonne option si vous avez des colonnes de types multiples car lorsque t () contraint votre dataframe à matrice, il contraint également toutes vos variables dans le même type.


2 commentaires

Cela peut avoir pour effet secondaire que toutes les colonnes numériques deviennent des caractères ou des factros en raison de la colonne XCODE dans le cas de OP.


Hm, bon point. Cela nécessiterait de redéfinir vos types de colonnes, et ce serait mauvais.



2
votes

Vous pouvez utiliser match si vous avez besoin de vérifier l'égalité de toutes les valeurs.

df <- fread('
   XCODE Age Sex ResultA Sex ResultB
1   X001  12   2       2       2       4
2   X002  23   2       4       2      66
3   X003  NA  NA      NA      NA      NA
4   X004  32   1       1       1       3
5   X005  NA  NA      NA      NA      NA
6   X001  NA  NA      NA      NA      NA
7   X002  NA  NA      NA      NA      NA
8   X003  33   1       8       1       6
9   X004  NA  NA      NA      NA      NA
10  X005  55   2       8       2       8
')[, -'V1']

Données utilisées:

df[, unique(match(df, df)), with = F]

df2
#    XCODE Age Sex ResultA ResultB
# 1   X001  12   2       2       4
# 2   X002  23   2       4      66
# 3   X003  NA  NA      NA      NA
# 4   X004  32   1       1       3
# 5   X005  NA  NA      NA      NA
# 6   X001  NA  NA      NA      NA
# 7   X002  NA  NA      NA      NA
# 8   X003  33   1       8       6
# 9   X004  NA  NA      NA      NA
# 10  X005  55   2       8       8


2 commentaires

d'accord, mais je n'ai pas mentionné cela, il y a des colonnes avec le même nom que je voudrais laisser (contient des données de base). Alors, comment puis-je supprimer les doublons, au cas où je connais les noms de ces colonnes que je souhaite supprimer?


Cela laissera les colonnes avec le même nom, à moins qu'elles n'aient toutes les mêmes valeurs.