unique () pour plus d’une variable

J’ai le bloc de données suivant en R:

> str(df) 'data.frame': 545227 obs. of 15 variables: $ ykod : int 93 93 93 93 93 93 93 93 93 93 ... $ yad : Factor w/ 42 levels "BAKUGAN","BARBIE",..: 30 30 30 30 30 30 30 30 30 30 ... $ per : Factor w/ 3 levels "2 AYLIK","3 AYLIK",..: 3 3 3 3 3 3 3 3 3 3 ... $ donem: int 201101 201101 201101 201101 201101 201101 201101 201101 201101 201101 ... $ sayi : int 201101 201101 201101 201101 201101 201101 201101 201101 201101 201101 ... $ mkod : int 4 5 9 11 12 18 20 22 25 26 ... $ mad : Factor w/ 10464 levels " Defne Market ",..: 405 8075 9710 10145 9297 7973 2542 3892 2759 5769 ... $ mtip : Factor w/ 29 levels "Abone Bürosu ",..: 2 20 20 2 2 2 2 2 2 2 ... $ kanal: Factor w/ 2 levels "OB","SS": 2 2 2 2 2 2 2 2 2 2 ... $ bkod : int 110565 110565 110565 110565 110565 110565 110565 110565 110565 110565 ... $ bad : Factor w/ 212 levels "4. Levent","500 Evler",..: 167 167 167 167 167 167 167 167 167 167 ... $ bolge: Factor w/ 12 levels "Adana Şehiriçi",..: 7 7 7 7 7 7 7 7 7 7 ... $ sevk : int 2 3 3 3 2 2 2 6 2 2 ... $ iade : int 2 1 0 2 0 2 1 0 0 2 ... $ satis: int 0 2 3 1 2 0 1 6 2 0 ... 

Je veux lister les valeurs uniques (comme SQL’s DISTINCT) pour plusieurs variables sélectionnées. Par exemple, unique(yad) me donne les noms de chacun des 42 éléments, mais je dois extraire deux colonnes ( yad et per ensemble, avec toutes les combinaisons uniques):

 yad per --- --- BARBIE AYLIK BAKUGAN 2 AYLIK MICKEY MOUSE 2 AYLIK TINKERBELL 3 AYLIK ... ... 

Comment puis-je atteindre cet objective?

Que diriez-vous d’utiliser unique() lui-même?

 df <- data.frame(yad = c("BARBIE", "BARBIE", "BAKUGAN", "BAKUGAN"), per = c("AYLIK", "AYLIK", "2 AYLIK", "2 AYLIK"), hmm = 1:4) df # yad per hmm # 1 BARBIE AYLIK 1 # 2 BARBIE AYLIK 2 # 3 BAKUGAN 2 AYLIK 3 # 4 BAKUGAN 2 AYLIK 4 unique(df[c("yad", "per")]) # yad per # 1 BARBIE AYLIK # 3 BAKUGAN 2 AYLIK 

Ceci est un ajout à la réponse de Josh.

Vous pouvez également conserver les valeurs des autres variables tout en filtrant les lignes dupliquées dans data.table

Exemple:

 library(data.table) #create data table dt <- data.table( V1=LETTERS[c(1,1,1,1,2,3,3,5,7,1)], V2=LETTERS[c(2,3,4,2,1,4,4,6,7,2)], V3=c(1), V4=c(2) ) > dt # V1 V2 V3 V4 # AB 1 2 # AC 1 2 # AD 1 2 # AB 1 2 # BA 1 2 # CD 1 2 # CD 1 2 # EF 1 2 # GG 1 2 # AB 1 2 # set the key to all columns setkey(dt) # Get Unique lines in the data table unique( dt[list(V1, V2), nomatch = 0] ) # V1 V2 V3 V4 # AB 1 2 # AC 1 2 # AD 1 2 # BA 1 2 # CD 1 2 # EF 1 2 # GG 1 2 

Alerte: S’il existe différentes combinaisons de valeurs dans les autres variables, votre résultat sera

combinaison unique de V1 et V2

Il y a plusieurs façons d’obtenir toutes les combinaisons uniques d’un ensemble de facteurs.

 with(df, interaction(yad, per, drop=TRUE)) # gives labels with(df, yad:per) # ditto aggregate(numeric(nrow(df)), df[c("yad", "per")], length) # gives a data frame 
 df$new_var = paste(df$yad,df$per,sep = "_") length(unique(df$new_var)) #for checking df = df[!duplicated(df$new_var),] nrow(df) # for checking , this should be equal to 2nd line output df$new_var = NULL