2017-05-24 11 views
5

निम्नलिखित data.tables मैं के साथ 5 बल्कि 6. सेआर data.table रोल =

मैं काफी समझ में नहीं आता क्या हो रहा है 5.9 सूचकांक मिलान देख कर हैरान हूँ यह देखते हुए "निकटतम" वास्तव में नहीं निकटतम ।

dat <- data.table(index = c(4.3, 5.9, 1.2), datval = runif(3)+10, 
datstuff="test") 
reference <- data.table(index = 1:10, refjunk = "junk", refval = runif(10)) 

dat[, dat_index := index] 
reference[dat, roll="nearest", on="index"] 

मैं संदर्भ में सूचकांक == 6 पंक्ति के साथ 3 पंक्तियों देखने के लिए कम से कम निकटतम पर मेरी समझ लिए, डैट में सूचकांक == 5.9 पंक्ति के साथ मिलान किया जा रहा है उम्मीद करेंगे।

क्या यह अपेक्षित व्यवहार है?

आर 3.3.2, data.table का उपयोग करना 1.10.4

+0

इंडेक्स पूर्णांक हैं, डाउनकास्ट होने पर पूर्णांक को छोटा कर दिया जाता है। – awiebe

उत्तर

6

क्योंकि 1:10 पूर्णांकों का एक वेक्टर, पूर्णांकों पर किया में शामिल होने और as.integer(5.9) 5.

आप 1:10+0 उपयोग कर सकते हैं का निर्माण करने की है एक संख्यात्मक:

reference <- data.table(index = 1:10+0, ref_index=1:10, refjunk = "junk", refval = runif(10)) 
reference[dat, roll="nearest", on="index"] 

    index ref_index refjunk  refval datval datstuff dat_index 
1: 4.3   4 junk 0.09868848 10.37403  test  4.3 
2: 5.9   6 junk 0.60545607 10.86906  test  5.9 
3: 1.2   1 junk 0.50005336 10.07994  test  1.2