2010-05-03 6 views
12

Tengo una gran trama de datos con columnas como:Deshacerse de filas con los atributos duplicados en I

ID, time, OS, IP 

Cada fila de la trama de datos que corresponde a una entrada. Dentro de ese marco de datos para algunos IDs existen varias entradas (filas). Me gustaría deshacerme de esas filas múltiples (obviamente, los otros atributos serán diferentes para la misma ID). O ponlo diferente: solo quiero una sola entrada (fila) para cada ID.

Cuando uso unique en la columna ID, solo recibo los niveles (o cada ID única), pero también quiero conservar los otros atributos. He intentado usar apply(x,2,unique(data$ID)), pero esto tampoco funciona.

+1

Hay que definir qué es lo que quiere hacer con los otros atributos para las observaciones con el mismo ID cuando el no está de acuerdo. – Aniko

+0

Bueno, me gustaría ver la distribución del sistema operativo de los usuarios ... Así que cuando tengo el marco de datos con una sola entrada por usuario, Id do: mytable <- table (conjunto de datos $ os.name) y hacer un trazado posterior ... – CatholicEvangelist

Respuesta

26
subset(data,!duplicated(data$ID)) 

debe hacer el truco

+0

muchas gracias, estaba a punto de desesperarme ... – CatholicEvangelist

+0

Esto funcionará si no tiene ninguna heurística en mente para saber cómo seleccionar los otros datos. Parece un caso de uso muy extraño para mí ... – Shane

+1

Exactamente lo que necesitaba James, gracias. –

3

Si desea mantener una fila para cada ID, pero no hay datos diferentes en cada fila, entonces usted necesita para decidir sobre algo de lógica para descartar las filas adicionales. Por ejemplo:

df <- data.frame(ID=c(1, 2, 2, 3), time=1:4, OS="Linux") 
df 
    ID time OS 
1 1 1 Linux 
2 2 2 Linux 
3 2 3 Linux 
4 3 4 Linux 

Ahora voy a mantener el valor de tiempo máximo y el último valor SO:

library(plyr) 
unique(ddply(df, .(ID), function(x) data.frame(ID=x[,"ID"], time=max(x$time), OS=tail(x$OS,1)))) 
    ID time OS 
1 1 1 Linux 
2 2 3 Linux 
4 3 4 Linux 
+0

muchas gracias por la respuesta detallada! – CatholicEvangelist

Cuestiones relacionadas