2012-06-06 16 views

risposta

5

È possibile farlo con diversi pacchetti. Ma ecco come farlo con R. base di

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

Mi piace, ma non lo capisco. Mi piace perché (a differenza dell'altra risposta) lascia intatte tutte e tre le variabili nei miei dataframe (l'altra risposta cancella quelle e aggiunge una nuova "v1" che sembra essere il nome row.names di uno dei DF originali). Non lo capisco perché è la prima volta che vedo "! Duplicato" usato - più (o "e"?) Non capisco come funzionano le parti "fromLast" "FALSE" e "TRUE". Qualcos'altro da studiare. Ma è una soluzione elegante. – WGray

+0

Ciao, la soluzione funziona anche per più di 2 volte le righe duplicate? – eclairs

+0

@eclairs Se ho capito bene la tua domanda, sì questa soluzione escluderà più duplicati. –

3

Prova questo:

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 

noti che df1 e df2 sono le stesse di Lapointe di ma il contrario, perché si vuole rimuovere il righe da df1 che sono in df2, quindi setdiff rimuove elementi da x contenuti in . Vedere ?setdiff

si otterrà lo stesso risultato di Lapointe

+1

setdiff - buon dolore, un altro dei tanti modi per fare la stessa cosa se riesci a trovarlo. Apprezzo l'aiuto di tutti. – user1320487

Problemi correlati