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?
3 Réponses :
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.
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.
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.
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
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.