gpt4 book ai didi

r - 对于一列的每个值,找出哪个是另一个向量中较低的最后一个值

转载 作者:行者123 更新时间:2023-12-04 10:45:50 25 4
gpt4 key购买 nike

找到小于给定值的向量的最后位置非常简单(参见例如 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。

最佳答案

你可以使用findInterval

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

使用 cut 稍微复杂一些。但另一方面,您会立即得到 NA:

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

关于r - 对于一列的每个值,找出哪个是另一个向量中较低的最后一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48177459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com