gpt4 book ai didi

按另一个顺序对向量重新排序

转载 作者:行者123 更新时间:2023-12-03 18:17:17 25 4
gpt4 key购买 nike

我有两个向量:

vec1 <- c(0, 1, 2, 3, 4, 5, 6, 7, 9)
vec2 <- c(1, 2, 7, 5, 3, 6, 80, 4, 8)

我想在 vec1 中设置相同的顺序原样 vec2 .例如,在 vec2最大的数字(位置 9)在位置 7,所以我想把最大的数字放在 vec1 (位置 9,编号 9)到位置 7。

预期输出:
vec1 <- c(0, 1, 6, 4, 2, 5, 9, 3, 7)

我在任何向量中都没有任何重复值。

我主要对高效的 Rcpp 解决方案感兴趣,但也欢迎 R 中的任何内容。

最佳答案

另一个 baseR选项是 match

vec1[match(vec2, sort(vec2))]
# [1] 0 1 6 4 2 5 9 3 7

编辑

包括具有更大样本量的基准
set.seed(42)
n <- 1e6
vec1 <- seq_len(n)
vec2 <- sample(1:1e7, size = n)

benchmarks <- bench::mark(match = vec1[match(vec2, sort(vec2))],
rank = vec1[rank(vec2)],
frank = vec1[data.table::frank(vec2)],
order_order = vec1[order(order(vec2))],
rcpp_order_order = foo(vec1, vec2),
iterations = 25)
benchmarks[ , 1:3]

结果
# A tibble: 5 x 3
# expression min median
# <bch:expr> <bch:tm> <bch:tm>
#1 match 259.8ms 322ms
#2 rank 825.9ms 876ms
#3 frank 88.6ms 134ms
#4 order_order 110.6ms 139ms
#5 rcpp_order_order 793.5ms 893ms

关于按另一个顺序对向量重新排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60803071/

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