Bir veri çerçevesinde, ikinci veri çerçevesinden veri ayıklamak amacıyla ikinci bir veri çerçevesindeki en yakın zaman damgasıyla eşleştirmeye çalıştığım bir zaman damgası var. Benim yaklaşımın genel bir örnek için aşağıya bakınız: Bu iyi çalışırBaşka bir veri kümesinde en çok zamana göre eşlenen verileri eşleştirin. Düzgün vektör? Daha hızlı yol?
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
, çok yavaş dışında referans dataframe benim gerçek dünya uygulamasında oldukça büyük olduğu için. Bu kod düzgün bir şekilde vektörlenmiş mi? Bu operasyonu gerçekleştirmenin daha hızlı, daha zarif bir yolu var mı?
Python'da, numpy.searchsorted işlevinin tam olarak ne için olduğu budur. Ben bir R eşdeğeri aradım ama şu ana kadar bir tane bulamıyorum .. – cxrodgers
@cxrodgers: Bu işleve bu işlevin bir uygulamasını görmek ilginç olurdu. Tis belgelerine baktıktan sonra, bunu nasıl yapacağımı merak ederek kafamı çiziyorum. Çok çalışan bir örnek bulabilir misin? –
@BondedBu Rico'nun sağladığı yanıtı şu adreste bulabilirsiniz: http://stackoverflow.com/questions/8914491/finding-the-nearest-value-and-return-the-index-of-array-in-python – cxrodgers