假设我们有几个向量
a <- c(1, 2, 2, 4, 7)
b <- c(1, 2, 3, 5, 7)
Run Code Online (Sandbox Code Playgroud)
对于我想要的每个元素b[i],b找到的元素数量a少于b[i]或等价,我想知道b_i的等级c(b[i], a).
我可以想到几种天真的方式,例如,做以下任何一种情况length(b):
min_rank(c(b[i], a))
sum(a < b[i])
Run Code Online (Sandbox Code Playgroud)
如果length(a)= length(b)= N,其中N很大,那么最好的方法是什么?
编辑:
为了澄清,我想知道是否有一种计算效率更高的方法来做到这一点,即在这种情况下我是否能比二次时间更好.
矢量化总是很酷;),谢谢@Henrik!
运行时间
a <- rpois(100000, 20)
b <- rpois(100000, 10)
system.time(
result1 <- sapply(b, function(x) sum(a < x))
)
# user system elapsed
# 71.15 0.00 71.16
sw <- proc.time()
bu <- sort(unique(b))
ab <- sort(c(a, bu)) …Run Code Online (Sandbox Code Playgroud)