Único en un dataframe con solo columnas seleccionadas

Tengo un dataframe con> 100 columnas, y me gustaría encontrar las filas únicas, al comparar solo dos de las columnas. Espero que sea fácil, pero no puedo hacer que funcione con mi duplicated unique o duplicated .

En el siguiente, me gustaría que solo use id y id2:

 data.frame(id=c(1,1,3),id2=c(1,1,4),somevalue=c("x","y","z")) id id2 somevalue 1 1 x 1 1 y 3 4 z 

Me gustaría obtener:

 id id2 somevalue 1 1 x 3 4 z 

o:

 id id2 somevalue 1 1 y 3 4 z 

(No tengo preferencia cuál de las filas únicas se mantiene)

De acuerdo, si no importa qué valor en la columna no duplicada que seleccione, esto debería ser bastante fácil:

 dat <- data.frame(id=c(1,1,3),id2=c(1,1,4),somevalue=c("x","y","z")) > dat[!duplicated(dat[,c('id','id2')]),] id id2 somevalue 1 1 1 x 3 3 4 z 

Dentro de la llamada duplicated , simplemente estoy pasando solo las columnas de dat que no quiero duplicados. Este código siempre seleccionará automáticamente el primero de los valores ambiguos. (En este caso, x.)

Usando unique() :

 dat <- data.frame(id=c(1,1,3),id2=c(1,1,4),somevalue=c("x","y","z")) dat[row.names(unique(dat[,c("id", "id2")])),] 

Aquí hay un par de opciones dplyr que mantienen filas no duplicadas basadas en las columnas id e id2:

 library(dplyr) df %>% distinct(id, id2, .keep_all = TRUE) df %>% group_by(id, id2) %>% filter(row_number() == 1) df %>% group_by(id, id2) %>% slice(1) 

Actualización menor en el código de @ Joran.
Usando el siguiente código, puede evitar la ambigüedad y obtener solo el único de dos columnas:

 dat <- data.frame(id=c(1,1,3), id2=c(1,1,4) ,somevalue=c("x","y","z")) dat[row.names(unique(dat[,c("id", "id2")])), c("id", "id2")]