1
votes

Groupe R valeurs répétitives

Si j'ai affaire à un ensemble de données comme celui-ci

  Id     Index    Value
  1233   i        Blue
  6545   i1       Red
  6545   i2       NA
  6545   i3       Black
  4177   i        NA

Comment créer un nouvel ensemble de données en ne conservant qu'une seule instance de valeurs répétitives pour les identifiants 1233 et 4177 comme ci-dessous. p>

  Id     Index    Value
  1233   i1       Blue
  1233   i2       Blue
  1233   i3       Blue
  6545   i1       Red
  6545   i2       NA
  6545   i3       Black
  4177   i1       NA
  4177   i2       NA 
  4177   i2       NA 


0 commentaires

3 Réponses :


2
votes

Nous pouvons utiliser distinct

df1 <- structure(list(Id = c(1233L, 1233L, 1233L, 6545L, 6545L, 6545L, 
4177L, 4177L, 4177L), Index = c("i1", "i2", "i3", "i1", "i2", 
"i3", "i1", "i2", "i2"), Value = c("Blue", "Blue", "Blue", "Red", 
NA, "Black", NA, NA, NA)), class = "data.frame", row.names = c(NA, 
-9L))

Ou utiliser base R

df1[!duplicated(df1[c('Id', 'Value')]),]


2 commentaires

sympa avec dupliqué ! +1


@ThomasIsCoding merci, c'est une belle option utilisant l'index de ligne +1



1
votes

Peut-être que unique + noms de domaine peut vous aider

df <- structure(list(Id = c(1233L, 1233L, 1233L, 6545L, 6545L, 6545L, 
4177L, 4177L, 4177L), Index = c("i1", "i2", "i3", "i1", "i2", 
"i3", "i1", "i2", "i2"), Value = c("Blue", "Blue", "Blue", "Red", 
NA, "Black", NA, NA, NA)), class = "data.frame", row.names = c(NA, 
-9L))

de telle sorte que

    Id Index Value
1 1233    i1  Blue
4 6545    i1   Red
5 6545    i2  <NA>
6 6545    i3 Black
7 4177    i1  <NA>
DONNÉES
df[as.numeric(rownames(unique(df[-2]))),]


0 commentaires

0
votes

Vous pouvez utiliser le package data.table et l'argument by de sa méthode unique :

library(data.table)
unique(setDT(df), by = c("Id", "Value"))
#       Id  Index  Value
# 1:  1233     i1   Blue
# 2:  6545     i1    Red
# 3:  6545     i2   <NA>
# 4:  6545     i3  Black
# 5:  4177     i1   <NA>

p>


0 commentaires