当前位置: 首页 > 知识库问答 >
问题:

在R中,匹配矩阵行或列的函数

丌官星渊
2023-03-14

R中的值匹配功能非常有用。但据我理解,它不足以支持二维或高维输入。

例如,假设xy是相同列数的矩阵,我想将x的行与y的行进行匹配。“R”函数调用match(x,y)不这样做。列表的输入也存在同样的不足。

我已经实现了我自己的版本,名为matchMat(xMat,yMat)(附在下面),但我想知道您对此任务的解决方案是什么。

matchMat = function(xMat, uMat, dimn=1) {
    ind = rep(-1, dim(xMat)[dimn])
    id = 1 : dim(uMat)[dimn]
    for (i in id) {
        e = utilSubMat(i, uMat, dimn)
        isMatch = matchVect(e, xMat, dimn)
        ind[isMatch] = i
    }
    return(ind)
}

matchVect = function(v, xMat, dimn) {
    apply(xMat, dimn, function(e) {
        tf = e == v
        all(tf)
    })
}

unittest_matchMat = function() {
    dimn = 1
    uMat = matrix(c(1, 2, 2, 3, 3, 4, 4, 5), ncol=2, byrow=T)
    ind = sample(dim(uMat)[1], 10, replace=T)
    print(ind)
    xMat = uMat[ind, ]
    rst = matchMat(xMat, uMat, dimn)
    print(rst)
    stopifnot(all(ind == rst))

    xMat2 = rbind(c(999, 999), xMat, c(888, 888))
    rst2 = matchMat(xMat2, uMat, dimn)
    print(rst2)
    stopifnot(all(c(-1, ind, -1) == rst2))
    print('pass!')   
}

共有3个答案

乐正远
2023-03-14

您可以在不使用任何函数的情况下执行此操作:

假设adj1是包含列名和行名的3*3矩阵。名称为c('V1'、'V2'、'V3')vec1是您希望矩阵转换为的顺序:

vec1 <- c('V2','V3','V1')

您可以简单地使用以下代码

adj1[vec1,vec1]

这会给你带来魔力。

干杯

卢俭
2023-03-14

函数行。程序prodlim中的match允许您识别一个矩阵中在另一个矩阵中也找到(相同)的行。非常方便和易于使用。

library(prodlim)
row.match(x,y)
王扬
2023-03-14

match将处理原子向量的列表。因此,要将一个矩阵的行与另一个矩阵的行进行匹配,可以执行以下操作:

match(data.frame(t(x)), data.frame(t(y)))

t将行转置为列,然后data.frame在转置矩阵中创建列的list

 类似资料:
  • 我有两个列表,每个列表中有两个矩阵。。是否有一种方法可以对它们进行矩阵计算,即相加,其中matrix1中的蓝色矩阵与matrix2中的蓝色矩阵相加,matrix1中的红色矩阵与matrix2中的红色矩阵相加。我能想到的唯一方法是在循环中进行计算 请注意,我将有大约10个,以及不止一组(即蓝色、红色、绿色、紫色)

  • 我有一个矩阵,有很多行和列 使用 我想确定原始矩阵中每一行的第一次出现:这里有向量 我想出的最好的方法是使用既不高效也不优雅的循环的复杂和迂回的方法。我也知道data.frames的可能解决方案;那些涉及将行连接到字符串中的解决方案也是相当资源密集型的。 有没有使用基本R的优雅解决方案?

  • 我有一个有三个带的光栅和一个有三个列的矩阵。 我想找到y的每一行和r的每一个单元格之间的角度。 我可以通过以下方式将光栅转换为矩阵: 现在,每个has矩阵都具有相同的形状(每个has矩阵中有3列,每行作为一个像素或来自y的样本)。我已经研究过如何使用嵌套的apply()函数,但老实说,我不理解语法,因此无法使其正常工作。 我有40个非常大的超光谱光栅(425个波段)和一个50行矩阵,我需要使用它来

  • 问题内容: 我正在使用Numpy将数据存储到矩阵中。从R背景开始,有一种极其简单的方法将函数应用于矩阵的行/列或两者。 python / numpy组合是否有类似的东西?编写自己的小实现不是问题,但是在我看来,我想出的大多数版本都将比现有的实现效率低得多/占用更多内存。 我想避免从numpy矩阵复制到局部变量等,这可能吗? 我尝试实现的功能主要是简单的比较(例如,某列中有多少个元素小于数字x,或者

  • 假设我们有两个矩阵,即和,分别为和。 我们如何才能找到哪些行与行相同(反之亦然)? 优选的输出是矩阵,其行数等于矩阵和之间的标识行,两列,即第一列包含矩阵的行数,第二列包含矩阵的行数。

  • 主要内容:语法,例子,访问矩阵的元素,矩阵计算矩阵是其中元素以二维矩形布局排列的R对象。它们包含相同原子类型的元素。 虽然我们可以创建一个仅包含字符或仅包含逻辑值的矩阵,但它们没有太多用处。 我们使用包含数学元素的矩阵来在数学计算中使用。 矩阵可通过使用函数来创建。 语法 在R中创建矩阵的基本语法是 - 以下是使用的参数的描述 - data - 是将要转为矩阵元素的输入向量。 nrow - 是要创建的行数。 ncol - 是要创建的列数。 b