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
3 Réponses :
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')]),]
sympa avec dupliqué
! +1
@ThomasIsCoding merci, c'est une belle option utilisant l'index de ligne +1
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]))),]
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>