2012-12-08 34 views
19

我有兩個數據幀(A,B)具有相同的列名(C),但在該列中可以具有不同的唯一值。我想檢查數據幀(B)中是否存在數據幀(A)中列(C)中的'值'。檢查一個數據幀中是否存在值

A = data.frame(C=c(1,2,3,4)) 
B = data.frame(C=c(1,3,4,7)) 

在上面的例子中,我要檢查,如果「2」出現在B或不 是否有任何一個襯墊不循環,因爲我有相當大的文件,必須在每一行進行檢查。

+2

'setdiff'可能感興趣 – James

回答

52

使用%in%如下

A$C %in% B$C 

它會告訴你的C柱,其值是B.

什麼是返回是一個合乎邏輯的載體。在您的示例的特定情況下,您可以:

A$C %in% B$C 
# [1] TRUE FALSE TRUE TRUE 

,你可以作爲索引使用的A行或爲指標,A$C得到的實際值:

# as a row index 
A[A$C %in% B$C, ] # note the comma to indicate we are indexing rows 

# as an index to A$C 
A$C[A$C %in% B$C] 
[1] 1 3 4 # returns all values of A$C that are in B$C 

我們可以否定它太:

A$C[!A$C %in% B$C] 
[1] 2   # returns all values of A$C that are NOT in B$C 



如果你想知道,如果一個特定的值在B $ C ,使用相同的功能:

2 %in% B$C # "is the value 2 in B$C ?" 
    # FALSE 

    A$C[2] %in% B$C # "is the 2nd element of A$C in B$C ?" 
    # FALSE 
+0

最後一個表達式會告訴你在一個$ C的第二個值是否在B $℃。 –

+0

是的,絕對。在原始示例中,「A $ C [2]」是「2」,因此缺乏清晰度。我編輯了我的示例中的評論,希望能夠澄清。 –

相關問題