tablas repetidas filas eliminar elementos duplicated duplicado duplicadas columnas r dplyr

repetidas - Eliminar filas duplicadas utilizando dplyr



eliminar na en r (4)

Tengo un data.frame como este -

set.seed(123) df = data.frame(x=sample(0:1,10,replace=T),y=sample(0:1,10,replace=T),z=1:10) > df x y z 1 0 1 1 2 1 0 2 3 0 1 3 4 1 1 4 5 1 0 5 6 0 1 6 7 1 0 7 8 1 0 8 9 1 0 9 10 0 1 10

Me gustaría eliminar las filas duplicadas en función de las dos primeras columnas. Rendimiento esperado -

df[!duplicated(df[,1:2]),] x y z 1 0 1 1 2 1 0 2 4 1 1 4

Estoy buscando específicamente una solución usando el paquete dplyr .


Aquí hay una solución usando dplyr 0.3 .

library(dplyr) set.seed(123) df <- data.frame( x = sample(0:1, 10, replace = T), y = sample(0:1, 10, replace = T), z = 1:10 ) > df %>% distinct(x, y) x y z 1 0 1 1 2 1 0 2 3 1 1 4

Actualizado para dplyr 0.5

dplyr versión 0.5 El comportamiento predeterminado de distinct() devuelve solo columnas especificadas en ... argumento.

Para lograr el resultado original, ahora debe usar:

df %>% distinct(x, y, .keep_all = TRUE)


Cuando selecciona columnas en R para un conjunto de datos reducido, a menudo puede terminar con duplicados.

Estas dos líneas dan el mismo resultado. Cada salida es un conjunto de datos único con dos columnas seleccionadas solamente:

distinct(mtcars, cyl, hp); summarise(group_by(mtcars, cyl, hp));


Para mayor completitud, lo siguiente también funciona:

df %>% group_by(x) %>% filter (! duplicated(y))

Sin embargo, prefiero que la solución sea distinct , y sospecho que también es más rápida.


library(dplyr) set.seed(123) df <- data.frame( x = sample(0:1, 10, replace = T), y = sample(0:1, 10, replace = T), z = 1:10 )

Un enfoque sería agrupar, y luego solo mantener grupos con una sola fila:

df %>% group_by(x, y) %>% filter(row_number(z) == 1) ## Source: local data frame [3 x 3] ## Groups: x, y ## ## x y z ## 1 0 1 1 ## 2 1 0 2 ## 3 1 1 4

(En dplyr 0.2 no necesitará la variable ficticia z y solo podrá escribir row_number() == 1 )

También he estado pensando en agregar una función slice() que funcionaría así:

df %>% group_by(x, y) %>% slice(from = 1, to = 1)

O tal vez una variación de unique() que le permita seleccionar qué variables usar:

df %>% unique(x, y)