Marquer les doublons dans R [duplicate]

Sep 14 2020

J'ai l'ensemble de données suivant:

dataset <- data.frame(id = c("A","A","A","A","B","B","B,"B"),
                      value = c(1,1,2,3,5,6,6,7))

Pour chaque identifiant dupliqué, je souhaite marquer la ligne où cela se produit, et cet indicateur doit avoir la même longueur que la source de la trame de données. Voici le résultat attendu:

id    value    flag
A     1        1
A     1        1
A     2        0
A     3        0
B     5        0
B     6        1
B     6        1
B     7        0

Existe-t-il un moyen de ne pas avoir à utiliser une boucle for? Toute aide est la bienvenue.

Réponses

7 RonakShah Sep 14 2020 at 09:04

Nous pouvons utiliser duplicatedavec et sans fromLast = TRUEpour marquer toutes les valeurs répétées comme 1.

dataset$flag <- as.integer(duplicated(dataset$value) | 
                           duplicated(dataset$value, fromLast = TRUE))
dataset

#  id value flag
#1  A     1    1
#2  A     1    1
#3  A     2    0
#4  A     3    0
#5  B     5    0
#6  B     6    1
#7  B     6    1
#8  B     7    0
1 YuriySaraykin Sep 14 2020 at 12:31

utilisation tidyverse

library(tidyverse)
df %>% 
  group_by(value) %>% 
  mutate(flag = +(n() > 1)) %>% 
  ungroup()

# A tibble: 8 x 3
  id    value  flag
  <chr> <dbl> <int>
1 A         1     1
2 A         1     1
3 A         2     0
4 A         3     0
5 B         5     0
6 B         6     1
7 B         6     1
8 B         7     0