2017-01-17 8 views
1

私はリストを含む列を持つデータテーブルを持っています。私は別の列がリスト列に存在するかどうかを確認したい。data.table - ある列が別の列(リスト)にあるかどうかを調べる

library(data.table) 
dt <- data.table("a" = 1:3, "b" = list(1:2, 3:4, 5:6)) 

私が試した:

dt[, is_a_in_b := a %in% b] 
dt 
# a b is_a_in_b 
# 1: 1 1,2  FALSE 
# 2: 2 3,4  FALSE 
# 3: 3 5,6  FALSE 

を正しい結果が得られません。 ab:目的のテーブルには、次の2つのベクトルに機能%in%を適用するとmapply機能を使用することができます

dt 
# a b is_a_in_b 
# 1: 1 1,2  TRUE 
# 2: 2 3,4  FALSE 
# 3: 3 5,6  FALSE 
+0

も参照してください:http://stackoverflow.com/questions/38796767/set-operation-within-a-list-columnとhttp://stackoverflow.com/questions/36871281/performing-operations-with -a-list-column-in-a-data-table – MichaelChirico

答えて

2

だろう。実際には、ベクトル(リスト)のペアを取り、ixの各インデックスに対して、a[ix] %in% b[[ix]]の結果を生成します。

dt[, is_a_in_b := mapply('%in%', a, b)] 

> dt 
    a b is_a_in_b 
1: 1 1,2  TRUE 
2: 2 3,4  FALSE 
3: 3 5,6  FALSE 
+2

結果をアトミックにドロップするので 'mapply'に編集され、' unlist'の必要はありません。あなたが気にしないことを願っています。 –

+2

もう一つのオプション 'Vectorize(\'%in%\ ')(a、b)' – Frank

関連する問題