2016-08-26 3 views
7

के बजाय रोल = "निकटतम" रिटर्न "खोज मूल्य" के साथ जुड़ें मुझे बाइनरी खोज फ़ंक्शन J() और roll = "nearest" के साथ कोई समस्या मिली है।डेटाटेबल मूल मूल्य

चलो कहते हैं कि मैं इस उदाहरण data.table "डीटी"

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

मिले हैं मुझे क्या करना roll = "nearest" के साथ एक खोज:

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

... जो रिटर्न:

Key Value1 Value2 
15 2  1 

इस प्रकार, सही पंक्ति वापस आती है। हालांकि, मूल "कुंजी" मान (12) को खोज में उपयोग किए गए मान (15) द्वारा प्रतिस्थापित किया गया है।

मेरा सवाल यह है कि एक सामान्य व्यवहार है और क्या कोई इस ऑटो ओवरराइड को बदल सकता है?

संपादित करें:

प्रतिलिपि प्रस्तुत करने योग्य उदाहरण (ध्यान दें मैं संस्करण 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

यह आधार आर से विरासत में मिला है, और [data.table # 1615] (https://github.com/Rdatatable/data.table/issues/1615) से संबंधित है। यदि आप पुनरुत्पादित उदाहरण प्रदान करेंगे तो मैं आपको समाधान देने की कोशिश करूंगा ... – jangorecki

+1

आपके उत्तर के लिए धन्यवाद! पुनरुत्पादित उदाहरण से आपका मतलब कुछ ऐसा है? – Lennie

+0

हां, बस आसान प्रतिलिपि और पेस्ट के लिए थोड़ा संपादित किया गया है, यह लोगों को जवाब देने के लिए प्रोत्साहित करता है :) – jangorecki

उत्तर

6

आप शायद 1.9.7 में data.table जरूरत x.V1 काम करने के लिए। फिर आप स्पष्ट रूप से x डेटासेट से कॉलम का संदर्भ ले सकते हैं। शामिल होने क्योंकि में इस्तेमाल कॉलम दूसरा डाटासेट i से लिया जाता है यह आवश्यक है, के रूप में यह आधार आर में है

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 

आप आप का उल्लेख जैसा कि पहले ही 1.9.7, दूसरों के लिए कौन नहीं करता है Installation wiki देखें।