2013-05-01 20 views
14

Supponiamo che abbia un frame di dati più grande e uno più piccolo. Se la più piccola è contenuta all'interno del più grande, come posso avere:sottraendo un frame di dati dall'altro

ingrandita - Più piccolo

Esempio:

piccola cornice di dati:

 ID  CSF1PO CSF1PO.1 D10S1248 D10S1248.1 D12S391 D12S391.1 
203079_BA_M  10  11  14   16  -9  -9 
203079_BA_F  8  12  14   17  -9  -9 
203080_BA_M  10  12  13   13  -9  -9 

Big dati frame:

 ID  CSF1PO CSF1PO.1 D10S1248 D10S1248.1 D12S391 D12S391.1 
203078_MG_M  -9  -9  15   15  18  20 
203078_MG_F  -9  -9  14   15  17  19 
203079_BA_M  10  11  14   16  -9  -9 
203079_BA_F  8  12  14   17  -9  -9 
203080_BA_M  10  12  13   13  -9  -9 
203080_BA_F  10  11  14   16  -9  -9 
203081_MG_M  10  12  14   16  -9  -9 
203081_MG_F  11  12  15   16  -9  -9 
203082_MG_M  11  11  13   15  -9  -9 
203082_MG_F  11  11  13   14  -9  -9 

Il piccolo riquadro dati corrisponde alle righe 3, 4 e 5 del riquadro dati più grande.

Grazie!

+1

Se 'ID' è una chiave (determina in modo univoco il resto della riga),' Grande [! (Big $ ID% in% Small $ ID), '' dovrebbe funzionare. È pazzesco senza una chiave, immagino. – Frank

+0

ID è effettivamente un nome di riga ... non una colonna nei frame di dati, ma posso renderlo una colonna se necessario. – vitor

+1

Nessuna necessità. Usa semplicemente 'rownames (Big)' al posto di 'Big $ ID'. – Frank

risposta

17

Prova questo:

BigDF[ !(BigDF$ID %in% SmallDF$ID), ] 
6

In dplyr:

library(dplyr) 

setdiff(BigDF, SmallDF) 

Ulteriori informazioni: Hadley DPLY bigino: https://www.rstudio.com/wp-content/uploads/2015/02/data-wrangling-cheatsheet.pdf

concisi Set Operazioni funzioni con esempi http://rpackages.ianhowson.com/cran/dplyr/man/setops.html (ma l'intero Grammar of Data Manipulation è una grande risorsa nel complesso)

E anche se il sottostante non è in risposta diretta alla sua domanda - è spesso legata per me (ed è stato molto utile)

Se si desidera catturare i nuovi cambiamenti che si sono verificati tra un nuovo dataframe e una versione precedente della stessa dataframe (all'interno degli stessi record) si vuole rendere il codice aspetto come di seguito:

setdiff(NewDF, OldDF) 
Problemi correlati