我有下一个问题。我有一个矩阵A,其行是序列seq(1:D)
的所有可能排列。我有其他D矩阵,其行也是排列。我想生成一个维度为D!xD
的矩阵,其[i,j]
分量是与j-th
矩阵中A的i-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
和
B= [1,2,3
1,2,3
3,2,1] #One of my D matrixes
和
C=[2,1,3
1,2,3
2,3,1]. #Another of my matrixes
我正在寻找的输出是
count= [2,1
0,0
0,1
0,1
0,0
1,0].
你可以帮帮我吗?我不想使用循环,因为我的代码中有足够的东西,这应该是循环的。
非常感谢你 -
答案 0 :(得分:1)
数据:强>
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)
代码:每行将列合并为一个数字字符串,并将A的矢量与B和C进行比较。
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
答案 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))
输出:
> 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