2013-05-01 37 views
14

khác giả sử tôi có khung dữ liệu lớn hơn và khung dữ liệu nhỏ hơn. Nếu một nhỏ được chứa bên trong lớn hơn một, làm thế nào tôi có thể có:trừ một khung dữ liệu khỏi

Larger - Nhỏ

Ví dụ:

khung dữ liệu nhỏ:

 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 dữ liệu khung:

 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 

Khung dữ liệu nhỏ tương ứng với các hàng 3, 4 và 5 của khung dữ liệu lớn hơn.

Cảm ơn!

+1

Nếu 'ID' là một khóa (xác định duy nhất phần còn lại của hàng),' Big [! (Big $ ID% trong% Small $ ID),] 'sẽ hoạt động. Đó là messier mà không có một chìa khóa, tôi đoán. – Frank

+0

ID thực sự là tên hàng ... không phải là một cột trong các khung dữ liệu, nhưng tôi có thể biến nó thành cột nếu cần. – vitor

+1

Không cần. Chỉ cần sử dụng 'rownames (Big)' thay cho 'Big $ ID'. – Frank

Trả lời

17

Hãy thử điều này:

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

Trong dplyr:

library(dplyr) 

setdiff(BigDF, SmallDF) 

More Info: Hadley của dply cheatsheet: https://www.rstudio.com/wp-content/uploads/2015/02/data-wrangling-cheatsheet.pdf

ngắn gọn Set Operations chức năng với các ví dụ http://rpackages.ianhowson.com/cran/dplyr/man/setops.html (Nhưng toàn bộ Grammar of Data Manipulation là một nguồn lực lớn tổng thể)

Và mặc dù dưới đây không phải là trong câu trả lời trực tiếp câu hỏi của bạn - đó là thường xuyên liên quan đối với tôi (và đã được rất hữu ích)

Nếu bạn muốn nắm bắt được những thay đổi mới mà đã xảy ra giữa một dataframe mới và một phiên bản trước của dataframe cùng (bên trong các hồ sơ tương tự), bạn sẽ muốn làm cho mã của bạn trông như sau:

setdiff(NewDF, OldDF) 
Các vấn đề liên quan