2013-05-01 21 views
14

Daha büyük bir veri çerçevem ​​var ve daha küçük bir tane var. Küçük olan büyük birinin içinde bulunuyorsa, nasıl sahip olabilir:Bir veri çerçevesinin diğerlerinden çıkarılması

Büyük - Daha Küçük

Örnek:

Küçük veri çerçevesi:

 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 

Büyük veri çerçeve:

 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 

Küçük veri çerçevesi, daha büyük veri çerçevesinin 3, 4 ve 5 satırlarına karşılık gelir.

Teşekkürler!

+1

Eğer 'ID' bir anahtar ise (satırın geri kalanını benzersiz olarak belirler), 'Big [! (% Small $ ID içinde Büyük $ ID% 'si)] çalışmalıdır. Anahtarsız bir haber, sanırım. – Frank

+0

Kimlik aslında satır adları ... veri çerçevelerinde bir sütun değil, ancak gerekirse bir sütun yapabilirim. – vitor

+1

Gerek yok. Sadece 'Big $ ID' yerine' rownames (Big) 'kullanın. – Frank

cevap

17

bu deneyin: dplyr olarak

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

:

library(dplyr) 

setdiff(BigDF, SmallDF) 

Fazla Bilgi: Hadley günlerde, Pardus: örneklerle https://www.rstudio.com/wp-content/uploads/2015/02/data-wrangling-cheatsheet.pdf

Özlü Küme İşlemleri fonksiyonları http://rpackages.ianhowson.com/cran/dplyr/man/setops.html

(Ama bütün Grammar of Data Manipulation genel bir kaynaktır) Ve aşağıda rağmen sorunuzun direkt cevap değil - sıkça benim için ilişkilidir (ve çok faydalı olmuştur)

yeni bir dataframe ve (aynı kayıtları içinde) aynı dataframe önceki bir sürümüne kodunuzu yapmak isteyeceksiniz arasında meydana gelmiş yeni değişiklikleri yakalamak isterseniz

olarak aşağıdan:

setdiff(NewDF, OldDF) 
İlgili konular