在R中,相当于upper_bound()
问题描述:
我有两个向量A和B。我想要A的每个日期,获得B中最接近的日期,它比日期本身更大或更好。在R中,相当于upper_bound()
(原因是B是一个工作日的列表,我需要我的输出是一个工作日)。
我该如何以矢量化的方式在R中做到这一点?
答
+1到blindJesse的应用逻辑,但需要注意给予的情况下没有最近的日期存在还有发生的数字强制:
a <- as.Date(sample(1:20, 5, T), origin=Sys.Date())
#[1] "2012-08-26" "2012-08-31" "2012-08-25" "2012-08-18" "2012-08-20"
b <- as.Date(sample(1:20, 5, T), origin=Sys.Date())
#[1] "2012-08-27" "2012-08-27" "2012-08-25" "2012-08-22" "2012-08-17"
sapply(a, function(x) min(b[b>x]))
#[1] 15579 Inf 15579 15574 15574
# generate the min index instead, catching for no min case
min.indices <- sapply(a, function(x) {
ifelse(length(which.min(b[b>x]))==0, NA, which.min(b[b>x]))
})
b[min.indices]
#[1] "2012-08-27" NA "2012-08-27" "2012-08-22" "2012-08-22"
答
这应该工作,虽然有可能是一个矢量化的解决方案:
sapply(d1, function(x) min(d2[d2>x]))
如果您在问题中发布样本数据和预期结果,它总是会更容易回答。 – Andrie 2012-08-13 17:45:00
@Andrie:点了 – BlueTrin 2012-08-13 19:31:23