R 对于一列的每个值,找出另一个较低向量的最后一个值
找到小于给定值的向量的最后一个位置相当简单(参见 但是,对data.frame或data.table中的一列逐行执行此操作的速度非常慢。例如,我们可以这样做(在小数据上可以,但在大数据上不行)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.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))]