gpt4 book ai didi

r - 将索引矩阵与其在 R 中的相应值交换的快速方法

转载 作者:行者123 更新时间:2023-12-05 03:19:27 26 4
gpt4 key购买 nike

我有一个 20000x100 矩阵,用于存储 1 到 40000 范围内的索引号。我想用相应的值切换索引。我将索引值对存储在另一个数据表中。由于这需要花费大量时间,而且我需要使用不同的值集重复此过程,因此我想了解执行此切换过程的最快方法。

一个可重现的例子(非常慢):

set.seed(42)
bigmatrix = matrix(round(runif(20, 1, 100)), ncol = 5)

# bigmatrix
# [,1] [,2] [,3] [,4] [,5]
#[1,] 92 65 66 94 98
#[2,] 94 52 71 26 13
#[3,] 29 74 46 47 48
#[4,] 83 14 72 94 56


couples = data.frame(id = c(1:100),
val = runif(100))
# head(couples)
# id val
# 1 1 0.90403139
# 2 2 0.13871017
# 3 3 0.98889173
# 4 4 0.94666823
# 5 5 0.08243756
# 6 6 0.51421178

for (i in c(1:nrow(bigmatrix))) {
for (j in c(1:ncol(bigmatrix))) {
bigmatrix[i, j] <- couples[couples$id == bigmatrix[i, j], ]$val
}
}

# bigmatrix

# [,1] [,2] [,3] [,4] [,5]
# [1,] 0.8368016 0.7758234 0.5636468416 0.4527316 0.3556660
# [2,] 0.4527316 0.1404791 0.6674265147 0.9575766 0.3881083
# [3,] 0.9709666 0.9330341 0.1894739354 0.2712866 0.8281585
# [4,] 0.2165673 0.6851697 0.0002388966 0.4527316 0.7193558

编辑:我还可以安排情侣数据,使其成为带有 list[index] = val 的数字列表,但如果有一种方法可以在没有任何 for 循环的情况下做到这一点,那就是太好了。

最佳答案

尝试

matrix(
couples$val[match(bigmatrix,couples$id)],
nrow=nrow(bigmatrix)
)

[,1] [,2] [,3] [,4] [,5]
[1,] 0.8368016 0.7758234 0.5636468416 0.4527316 0.3556660
[2,] 0.4527316 0.1404791 0.6674265147 0.9575766 0.3881083
[3,] 0.9709666 0.9330341 0.1894739354 0.2712866 0.8281585
[4,] 0.2165673 0.6851697 0.0002388966 0.4527316 0.7193558

关于r - 将索引矩阵与其在 R 中的相应值交换的快速方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73444251/

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