मेरे पास एक डेटा फ्रेम में एक टाइमस्टैम्प है जिसे मैं दूसरे डेटाफ्रेम से डेटा निकालने के उद्देश्य से दूसरे डेटाफ्रेम में निकटतम टाइमस्टैंप से मिलान करने का प्रयास कर रहा हूं। मेरे दृष्टिकोण की एक सामान्य उदाहरण के लिए नीचे देखें:किसी अन्य डेटासेट में निकटतम समय पर टाइमस्टैम्प डेटा मिलान करना। उचित वेक्टरकृत? तेज़ तरीका?
library(lubridate)
data <- data.frame(datetime=ymd_hms(c('2015-04-01 12:23:00 UTC', '2015-04-01 13:49:00 UTC', '2015-04-01 14:06:00 UTC' ,'2015-04-01 14:49:00 UTC')),
value=c(1,2,3,4))
reference <- data.frame(datetime=ymd_hms(c('2015-04-01 12:00:00 UTC', '2015-04-01 13:00:00 UTC', '2015-04-01 14:00:00 UTC' ,'2015-04-01 15:00:00 UTC', '2015-04-01 16:00:00 UTC')),
refvalue=c(5,6,7,8,9))
data$refvalue <- apply(data, 1, function (x){
differences <- abs(as.numeric(difftime(ymd_hms(x['datetime']), reference$datetime)))
mindiff <- min(differences)
return(reference$refvalue[differences == mindiff])
})
data
# datetime value refvalue
# 1 2015-04-01 12:23:00 1 5
# 2 2015-04-01 13:49:00 2 7
# 3 2015-04-01 14:06:00 3 7
# 4 2015-04-01 14:49:00 4 8
यह ठीक काम करता है, को छोड़कर यह बहुत धीमी है, क्योंकि संदर्भ dataframe मेरी वास्तविक दुनिया आवेदन में काफी बड़ी है। क्या यह कोड सही ढंग से वेक्टरकृत है? क्या इस ऑपरेशन को करने का एक तेज, अधिक सुरुचिपूर्ण तरीका है?
पायथन में यह बिल्कुल सही है कि कार्य numpy.searchsorted के लिए है। मैंने एक आर समकक्ष की तलाश की लेकिन अब तक कोई नहीं मिल सकता .. – cxrodgers
@cxrodgers: इस कार्य के लिए इस कार्य के अनुप्रयोग को देखना दिलचस्प होगा। टीआईएस दस्तावेज को देखने के बाद, मैं अपने सिर को खरोंच कर रहा हूं कि यह कैसे करेगा। क्या आपको एक ऐसा काम करने वाला उदाहरण मिल सकता है? –
@ बॉन्डडडस्ट यहां बीआई रिको द्वारा प्रदान किए गए उत्तर को देखें: http://stackoverflow.com/questions/8914491/finding-the-nearest-value-and-return-the-index-of-array-in-python – cxrodgers