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

推荐答案

try

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相关问答推荐

有没有一种方法可以在子包上使用‘library()’中的‘exclub’参数?

使用R中的gt对R中的html rmarkdown文件进行条件格式设置表的单元格

在边界外添加注释或标题

寻找图片边缘

R创建一个数据透视表,计算多个组的百分比

咕噜中的元素列表:map

从gtsummary包中使用tBL_strata()和tBL_summary()时删除变量标签

从开始时间和结束时间导出时间

我想在R中总结一个巨大的数据框架,使我只需要唯一的lat、lon、Date(Year)和Maxium Value""""""""

使用列/行匹配将两个不同维度的矩阵相加

将. xlsx内容显示为HTML表

使用RSelenium在R中抓取Reddit时捕获多个标签

如何在使用箭头R包(箭头::OPEN_DATASSET)和dplyr谓词时编写具有整齐计算的函数?

如何将一个方阵分解成没有循环的立方体

从数据创建数字的命名列表.R中的框

使用列中的值来调用函数调用中应使用的其他列

有没有办法通过str_Detect()或其他字符串匹配函数来连接两个长度不等的数据帧?

如何判断代码是否在R Markdown(RMD)上下文中交互运行?

如何将EC50值绘制在R中的剂量-react 曲线上?

使用函数从R中的列中删除标高