【发布时间】:2018-01-10 15:37:47
【问题描述】:
找到小于给定值的向量的最后一个位置非常简单(参见例如this question
但是,对 data.frame 或 data.table 中的列逐行执行此操作非常慢。例如,我们可以这样做(在小数据上可以,但在大数据上不好)
library(data.table)
set.seed(123)
x = sort(sample(20,5))
# [1] 6 8 15 16 17
y = data.table(V1 = 1:20)
y[, last.x := tail(which(x <= V1), 1), by = 1:nrow(y)]
# V1 last.x
# 1: 1 NA
# 2: 2 NA
# 3: 3 NA
# 4: 4 NA
# 5: 5 NA
# 6: 6 1
# 7: 7 1
# 8: 8 2
# 9: 9 2
# 10: 10 2
# 11: 11 2
# 12: 12 2
# 13: 13 2
# 14: 14 2
# 15: 15 3
# 16: 16 4
# 17: 17 5
# 18: 18 5
# 19: 19 5
# 20: 20 5
有没有一种快速、矢量化的方式来获得同样的东西?最好使用 data.table 或 base R。
【问题讨论】:
标签: r