R 对于一列的每个值,找出另一个较低向量的最后一个值

R 对于一列的每个值,找出另一个较低向量的最后一个值,r,R,找到小于给定值的向量的最后一个位置相当简单(参见 但是,对data.frame或data.table中的一列逐行执行此操作的速度非常慢。例如,我们可以这样做(在小数据上可以,但在大数据上不行) 库(data.table) 种子集(123) x=排序(样本(20,5)) # [1] 6 8 15 16 17 y=数据表(V1=1:20) y[,last.x:=tail(其中(x在基数R中非常简单 x<-c(6L, 8L, 15L, 16L, 17L) y<-1:20 cumsum(

找到小于给定值的向量的最后一个位置相当简单(参见

但是,对data.frame或data.table中的一列逐行执行此操作的速度非常慢。例如,我们可以这样做(在小数据上可以,但在大数据上不行)

库(data.table)
种子集(123)
x=排序(样本(20,5))
# [1]  6  8 15 16 17
y=数据表(V1=1:20)

y[,last.x:=tail(其中(x在基数R中非常简单

x<-c(6L, 8L, 15L, 16L, 17L)
y<-1:20
cumsum(y %in% x)
 [1] 0 0 0 0 0 1 1 2 2 2 2 2 2 2 3 4 5 5 5 5

x您可以使用
findInterval

y[ , last.x := findInterval(V1, x)]

使用
cut
稍微复杂一些。但另一方面,您可以立即获得
NA
s:

y[ , last.x := as.numeric(cut(V1, c(x, Inf), right = FALSE))]

这可能在OP中的简单情况下有效,但请尝试
y Truth!不知道
findInterval()
函数,我可能会对您新提出的问题
apply(sappy(y,“>”,x),2,sum)
y[ , last.x := as.numeric(cut(V1, c(x, Inf), right = FALSE))]