2 votes

Suppression des doublons sur la base d'une catégorie spécifique d'une autre colonne

Je souhaite supprimer les doublons IDs dans mes données à l'aide de l'outil Category colonnes. Un sous-ensemble de mes données est le suivant :

df <- data.frame(ID=c(1,2,3,4,1,4,2),
                 category=c("a","b","c","d","b","a","a"))
df

  ID category
1  1        a
2  2        b
3  3        c
4  4        d
5  1        b
6  4        a
7  2        a

S'il y a un doublon ID de Category b Je dois donc le conserver et supprimer l'identifiant correspondant des autres catégories. De plus, je n'ai aucune priorité si l'identifiant dupliqué doit être supprimé. IDs constituent d'autres catégories à l'exclusion de Category b . Mon résultat préféré est donc le suivant :

  ID category
1  2        b
2  3        c
3  4        d
4  1        b

J'ai déjà lu cet article : R : Supprimer les doublons d'une base de données en fonction des catégories d'une colonne mais je n'arrive pas à trouver ma réponse

1voto

akrun Points 148302

Nous pourrions faire une arrange à ce que les lignes de la catégorie "b" soient disposées en haut et qu'elles obtiennent ensuite les lignes de la catégorie "c". distinct lignes par "ID

library(dplyr)
df %>%
     arrange(category != 'b') %>% 
     distinct(ID, .keep_all = TRUE)

-sortie

  ID category
1  2        b
2  1        b
3  3        c
4  4        d

Ou en utilisant base R

df[order(df$category != 'b'), ] -> df1
df1[!duplicated(df1$ID), ]

0voto

Onyambu Points 16644

Dans la base R, vous pourriez faire :

 subset(df, !category %in% category[ID %in% ID[category == 'b'] & category !='b'])
  ID category
1  2        b
2  3        c
3  4        d
4  1        b

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X