2016-03-21 11 views
0

私は、別のデータテーブルの特定の列に一致する値を使用してデータテーブルをサブセット化するソリューションを探していました。ここ別のdata.tableの列を照合してdata.tableをサブセット化

は例である:

set.seed(2) 

dt <- 
     data.table(a = 1:10, 
        b = rnorm(10), 
        c = runif(10), 
        d = letters[1:10]) 

dt2 <- 
     data.table(a = 5:20, 
        b = rnorm(16), 
        c = runif(16), 
        d = letters[5:20]) 

これは私が必要とする結果である:

IはAおよびDが一致するにもかかわらず、B第二のデータテーブルから行を返した
> dt2 

1: 5 -2.311069085 0.62512173 e 
2: 6 0.878604581 0.26030004 f 
3: 7 0.035806718 0.85907312 g 
4: 8 1.012828692 0.43748800 h 
5: 9 0.432265155 0.38814476 i 
6: 10 2.090819205 0.46150111 j 

とcはできません。実際のデータは相互に排他的です。私は3つの列に一致させる必要があります。

+1

を指定を使用しているあなたは、 '' on'のでjoin'を試してみました。ところで、 'set.seed'を使ってサンプルを再現可能にしてください。 – akrun

+0

@akrunマージを試みましたが、一致しない行を残さずにすべてのマッチを保持したいと思います。 – dc3

+0

@ dc3これは 'set.seed(2)'で期待される出力です。 – mtoto

答えて

2

%in%を使用すると、それに応じて列とサブセットを一致させることができます。ここで

dt2[a %in% dt$a & d %in% dt$d] 
# a   b   c d 
#1: 5 -2.31106908 0.6251217 e 
#2: 6 0.87860458 0.2603000 f 
#3: 7 0.03580672 0.8590731 g 
#4: 8 1.01282869 0.4374880 h 
#5: 9 0.43226515 0.3881448 i 
#6: 10 2.09081921 0.4615011 j 
1

はオプションが参加し、on

na.omit(dt2[dt[, c("a", "d"), with = FALSE], on = c("a", "d")]) 
# a   b   c d 
#1: 5 -2.31106908 0.6251217 e 
#2: 6 0.87860458 0.2603000 f 
#3: 7 0.03580672 0.8590731 g 
#4: 8 1.01282869 0.4374880 h 
#5: 9 0.43226515 0.3881448 i 
#6: 10 2.09081921 0.4615011 j 
+4

IIUCこれは 'nomatch'できれいに行うことができます。 OPのQのコメントを参照してください。 – Arun

関連する問題