2016-08-26 4 views
7

バイナリ検索機能J()roll = "nearest"に問題があります。data.table join with roll = "nearest"は元の値の代わりに "検索値"を返します

のは私がroll = "nearest"で検索を行うこの例data.table "DT"

Key Value1 Value2 
20 4  5 
12 2  1 
55 10  7 

を得たとしましょう:

dt[J(15), roll = "nearest"] 

...返す:

Key Value1 Value2 
15 2  1 

をしたがって、正しい行が返されます。しかし、元の「キー」値(12)は検索(15)で使用された値に置き換えられます。

私の質問は、通常の動作で、この自動オーバーライドを変更できますか?

EDIT:

再現例(私はバージョン1.9.7を使用して注意してください):

library("data.table") 
dt <- data.table(c(20,12,55), c(4,2,10), c(5,1,7)) 
dt 
# V1 V2 V3 
#1: 20 4 5 
#2: 12 2 1 
#3: 55 10 7 
setkey(dt, V1) 
dt[J(15), roll = "nearest"] 
# V1 V2 V3 
#1: 15 2 1 
+1

これはベースRから継承され、[data.table#1615](https://github.com/Rdatatable/data.table/issues/1615)に関連しています。再現可能な例を提供するなら、私はあなたに解決策を教えようとします... – jangorecki

+1

あなたの答えをありがとう!再現可能な例では、そのような意味ですか? – Lennie

+0

はい、ちょっと編集して簡単にコピー&ペーストすることができますので、人々は答えてください:) – jangorecki

答えて

6

おそらくx.V1仕事をするために1.9.7にdata.table必要です。次に、xデータセットの列を明示的に参照できます。あなたはすでに1.9.7を持って言及したようにはベースR.に

library("data.table") 
dt <- data.table(c(20,12,55), c(4,2,10), c(5,1,7)) 
setkey(dt, V1) 
dt[J(15), .(V1=x.V1, V2, V3), roll = "nearest"] 
# V1 V2 V3 
#1: 12 2 1 

あるように使用されるカラムにはない他人のために、第二のデータセットiから取られた結合ので、これが必要ですInstallation wikiを参照してください。

関連する問題