gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 16:27:42 24 4
gpt4 key购买 nike

value matching functionR非常有用。但根据我的理解,它不足以支持二维或高维输入。

例如,假设 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!')
}

最佳答案

match将在 list 上工作s 的原子向量。因此,要将一个矩阵的行与另一个矩阵相匹配,您可以执行以下操作:

match(data.frame(t(x)), data.frame(t(y)))
t将行转置为列,然后 data.frame创建一个 list转置矩阵中的列数。

关于r - 在 R 中,矩阵的行或列的匹配函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12697122/

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