2012-12-08 13 views
19

同じ列名(C)を持つ2つのデータフレーム(A、B)がありますが、その列に異なる一意の値を持つことができます。データフレーム(A)の列(C)の「値」がデータフレーム(B)に存在するかどうか確認したい。値が1つのデータフレームに存在するかどうかをチェック

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

は、上記の例では、私が「2」がBに存在しているかどうかを確認したいか、私はかなり大きなファイルを持っており、すべての行でこれを確認しなければならないようではない ループなしのいずれかのライナーは、あります。

+2

'setdiff'は、最後の式は、A $ Cの2番目の値がB $ Cにあったかどうかを言うだろう興味 – James

答えて

52

使用%in%としては、Aの列Cの値がどのような返されることは論理的なベクトルであるB.

にであることを教えてくれます

A$C %in% B$C 

に従います。あなたの例の具体的なケースでは、あなたが得る:

あなたが Aまたは実際の値を取得する A$Cへのインデックスとしての行へのインデックスとして使用することができます
A$C %in% B$C 
# [1] TRUE FALSE TRUE TRUE 

# 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

であってもよい:、同じ関数を使用します。 –

+0

はい、絶対に。元の例では 'A $ C [2]'は '2'であるため、明快さが欠けています。私は私の例でコメントを編集して、うまくいけば分かりました。 –

関連する問題