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 filas duplicadas basadas en 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 dplyr
paquete.
df %>% group_by(x, y) %>% do(head(.,1))
distinct()
Aquí hay una solución usando
dplyr >= 0.5
.fuente
Para completar, también funciona lo siguiente:
Sin embargo, prefiero usar la solución
distinct
y sospecho que también es más rápida.fuente
La mayoría de las veces, la mejor solución es usar
distinct()
dplyr, como ya se ha sugerido.Sin embargo, aquí hay otro enfoque que utiliza la
slice()
función de dplyr.Diferencia de usar la
distinct()
funciónLa ventaja de esta solución es que hace explícito qué filas se retienen del marco de datos original, y puede emparejarse muy bien con la
arrange()
función.Supongamos que tenía datos de ventas de clientes y quería conservar un registro por cliente, y desea que ese registro sea el de su última compra. Entonces podrías escribir:
fuente
Al seleccionar columnas en R para un conjunto de datos reducido, a menudo puede terminar con duplicados.
Estas dos líneas dan el mismo resultado. Cada uno genera un conjunto de datos único con solo dos columnas seleccionadas:
fuente
Si desea encontrar las filas que están duplicadas, puede usarlas
find_duplicates
desdehablar
:fuente