我有一个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循环,这将是很好的.