我正在尝试在2个矩阵之间映射匹配列。为简单起见,我有2个简单的矩阵,a和b:
L = []
for a in A
push!(L, length(a))
end
A[findmax(L)[2]]
我想创建一个长度为(a [,1])= 2的矢量,即
a <- matrix(c(1, 2), nrow = 2, ncol = 2)
b <- matrix(c(1,2,1,2,3:8), nrow = 2, ncol = 5)
> a
[,1] [,2]
[1,] 1 1
[2,] 2 2
> b
[,1] [,2] [,3] [,4] [,5]
[1,] 1 1 3 5 7
[2,] 2 2 4 6 8
out的第一个元素是b中与a的第一列匹配的列号,out的第二个元素是b中与第二列匹配的列号。我试过了
> out
[1] 1 2
但我需要结果向量的每个元素都是唯一的。可能是简单的解决方案,但我没有看到它。谢谢!
答案 0 :(得分:1)
您可能正在寻找类似intersect
的内容。
a <- matrix(c(10, 20), nrow = 2, ncol = 2)
b <- matrix(c(10,20,1,2,3:6,10,20), nrow = 2, ncol = 5)
#> b
# [,1] [,2] [,3] [,4] [,5]
#[1,] 10 1 3 5 10
#[2,] 20 2 4 6 20
#Finding matching columns in b from a. Only 1st column of a is considered
matched <- b[,1:ncol(b)] == a[,1:1]
#> matched
# [,1] [,2] [,3] [,4] [,5]
#[1,] TRUE FALSE FALSE FALSE TRUE
#[2,] TRUE FALSE FALSE FALSE TRUE
desired <- which(matched[1,], arr.ind = TRUE)
#> desired
#[1] 1 5
返回匹配的第1列和第5列。
答案 1 :(得分:1)
我想我不能在这里发表评论。 Anyhoo ...... MKR的上述答案看起来不错,但我会在创建“所需”对象之前添加此行。这是为了确保每个列元素匹配(而不是仅测试第一行)。
matched<-sapply(1:ncol(matched),function(x) all(matched[,x]))