manipulation ggplot change r unique

r - change - ggplot legend title



unique() para más de una variable (4)

Tengo el siguiente marco de datos 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 ...

Quiero enumerar valores únicos (como DISTINCT de SQL) para múltiples variables seleccionadas. Por ejemplo, unique(yad) me da los nombres de cada 42 elementos, pero necesito extraer dos columnas ( yad y per juntos, con todas las combinaciones únicas):

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

¿Cómo puedo conseguir esto?


¿Qué hay de usar unique() sí?

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


Esto es una adición a la respuesta de Josh.

También puede mantener los valores de otras variables mientras filtra las filas duplicadas en data.table

Ejemplo:

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 # A B 1 2 # A C 1 2 # A D 1 2 # A B 1 2 # B A 1 2 # C D 1 2 # C D 1 2 # E F 1 2 # G G 1 2 # A B 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 # A B 1 2 # A C 1 2 # A D 1 2 # B A 1 2 # C D 1 2 # E F 1 2 # G G 1 2

Alerta: si hay diferentes combinaciones de valores en las otras variables, entonces su resultado será

combinación única de V1 y V2


Hay algunas maneras de obtener todas las combinaciones únicas de un conjunto de factores.

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