2012-06-06 16 views

Respuesta

5

Puede hacerlo con varios paquetes. Pero aquí está cómo hacerlo con R. base de

df1 <-matrix(1:6,ncol=2,byrow=TRUE) 
df2 <-matrix(1:10,ncol=2,byrow=TRUE) 
all <-rbind(df1,df2) #rbind the columns 
#use !duplicated fromLast = FALSE and fromLast = TRUE to get unique rows. 
all[!duplicated(all,fromLast = FALSE)&!duplicated(all,fromLast = TRUE),] 

    [,1] [,2] 
[1,] 7 8 
[2,] 9 10 
+1

Me gusta esto, pero no lo entiendo. Me gusta porque (a diferencia de la otra respuesta) deja intactas las tres variables en mis marcos de datos (la otra respuesta las borra y agrega una nueva "v1" que parece ser la fila. Nombres de uno de los DF originales). No lo entiendo, ya que esta es la primera vez que veo "! Duplicated" used - plus (o "and"?) No entiendo cómo funcionan las partes "fromLast" "FALSE" y "TRUE". Algo más para estudiar. Pero es una solución elegante. – WGray

+0

Hola, ¿La solución también funciona por más de 2 veces filas duplicadas? – eclairs

+0

@eclairs Si entiendo su pregunta correctamente, sí, esta solución excluirá múltiples duplicados. –

3

Prueba esto:

df2 <-matrix(1:6,ncol=2,byrow=TRUE) 
df1 <-matrix(1:10,ncol=2,byrow=TRUE) 

data.frame(v1=setdiff(df1[,1], df2[,1]), v2=setdiff(df1[,2], df2[,2])) 
    v1 v2 
1 7 8 
2 9 10 

Tenga en cuenta que df1 y df2 son los mismos que Lapointe de pero en el revés, debido a que desea eliminar la filas de df1 que están en df2, por lo que setdiff elimina elementos de x que están contenidos en y. Ver ?setdiff

que obtendrá el mismo resultado que de Lapointe

+1

setdiff - buena pena, otra de las muchas formas en que r's puede hacer lo mismo si puede encontrarla. Aprecio la ayuda de todos. – user1320487

Cuestiones relacionadas