计算与R中另一个矩阵中的行数相等的行数

计算与R中另一个矩阵中的行数相等的行数,r,matrix,count,R,Matrix,Count,我有下一个问题。我有一个矩阵a,它的行都是序列seq(1:D)的可能排列。我还有其他的D矩阵,它们的行也是排列。我想生成一个维数D的矩阵!xD的[i,j]组件是与i-th矩阵中A的j-th行相同的行数。 一个简单的例子: A= [1,2,3 1,3,2 2,1,3 2,3,1 3,1,2 3,2,1] #Matrix of all posible permutations 及 及 我想要的输出是 count= [2,1 0,0

我有下一个问题。我有一个矩阵a,它的行都是序列
seq(1:D)
的可能排列。我还有其他的D矩阵,它们的行也是排列。我想生成一个维数
D的矩阵!xD
[i,j]
组件是与
i-th
矩阵中A的
j-th
行相同的行数。 一个简单的例子:

A= [1,2,3
    1,3,2
    2,1,3
    2,3,1
    3,1,2
    3,2,1]   #Matrix of all posible permutations

我想要的输出是

count= [2,1
        0,0
        0,1
        0,1
        0,0
        1,0]. 
你能帮我吗?我不想使用循环,因为我的代码中有足够的内容,这应该是一个循环

非常感谢-

数据:

A <- matrix( c(1,2,3,1,3,2,2,1,3,2,3,1,3,1,2,3,2,1), nrow = 6, ncol = 3, byrow = TRUE)
B <- matrix( c( 1,2,3,1,2,3,3,2,1), nrow = 3, byrow = TRUE)
C <- matrix( c(2,1,3,1,2,3,2,3,1), nrow = 3, byrow = TRUE)
#      [,1] [,2]
# [1,]    2    1
# [2,]    0    0
# [3,]    0    1
# [4,]    0    1
# [5,]    0    0
# [6,]    1    0

另一个解决方案,有点类似于@Sathish的解决方案:

A <- matrix( c(1,2,3,1,3,2,2,1,3,2,3,1,3,1,2,3,2,1), nrow = 6, ncol = 3, byrow = TRUE)
B <- matrix( c( 1,2,3,1,2,3,3,2,1), nrow = 3, byrow = TRUE)
C <- matrix( c(2,1,3,1,2,3,2,3,1), nrow = 3, byrow = TRUE)

# count rows of a matrix M equal to a vector vect
rowsEqualToVector <- function(vect, M){
  sum(apply(M, 1, function(matRow) identical(vect, matRow)))
}

# apply the previous function to each row of a matrix A
sameRows <- function(A,M){
  apply(A, 1, function(row) rowsEqualToVector(row, M))
}

# map the previous function to a list of matrices
sapply(list(B,C), function(M) sameRows(A,M))

使用分隔符(如
\uu
)折叠可能更安全。我认为请求的是匹配的位置,而不是计数。恐怕此解决方案有问题。设想一行
A
11,2,3,…
开头。然后该行将变为
1123…
,如果该行是“1、12、3、…”则相同。我想这就是@42建议使用分隔符的原因。非常感谢您的回答。我把它用在了一个代码中,它把时间从896.04秒减少到了196.23秒,这是一个非常糟糕的原因,因为我必须使用这个代码很多次。我担心当矩阵有不同的维度名称时,
idential
可能会导致问题。在这种情况下,应将
idential(vect,matRow)
替换为
all(vect==matRow)
A <- apply(A, 1, paste0, collapse = "_")
B <- apply(B, 1, paste0, collapse = "_")
C <- apply(C, 1, paste0, collapse = "_")

sapply( list(B,C), function(x) {
  sapply( A, function(y) sum(x %in% y))
})
#      [,1] [,2]
# [1,]    2    1
# [2,]    0    0
# [3,]    0    1
# [4,]    0    1
# [5,]    0    0
# [6,]    1    0
A <- matrix( c(1,2,3,1,3,2,2,1,3,2,3,1,3,1,2,3,2,1), nrow = 6, ncol = 3, byrow = TRUE)
B <- matrix( c( 1,2,3,1,2,3,3,2,1), nrow = 3, byrow = TRUE)
C <- matrix( c(2,1,3,1,2,3,2,3,1), nrow = 3, byrow = TRUE)

# count rows of a matrix M equal to a vector vect
rowsEqualToVector <- function(vect, M){
  sum(apply(M, 1, function(matRow) identical(vect, matRow)))
}

# apply the previous function to each row of a matrix A
sameRows <- function(A,M){
  apply(A, 1, function(row) rowsEqualToVector(row, M))
}

# map the previous function to a list of matrices
sapply(list(B,C), function(M) sameRows(A,M))
> sapply(list(B,C), function(M) sameRows(A,M))
     [,1] [,2]
[1,]    2    1
[2,]    0    0
[3,]    0    1
[4,]    0    1
[5,]    0    0
[6,]    1    0