R中矩阵的一行及其在同一矩阵中的逆矩阵

R中矩阵的一行及其在同一矩阵中的逆矩阵,r,matrix,reverse,na,R,Matrix,Reverse,Na,有没有办法找出矩阵中的一行是否包含在矩阵中,但以相反的方式 例如,这在以下矩阵中发生: [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [1,] 1 1 1 2 2 2 3 3 3 [2,] 1 2 3 1 2 3 1 2 3 [3,] 3 3 3 2 2 2 1 1

有没有办法找出矩阵中的一行是否包含在矩阵中,但以相反的方式

例如,这在以下矩阵中发生:

       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
  [1,]    1    1    1    2    2    2    3    3    3
  [2,]    1    2    3    1    2    3    1    2    3
  [3,]    3    3    3    2    2    2    1    1    1
在第一排和第三排之间

我已经开发了以下代码,但它仅在矩阵中以相反的方式存在一行时才起作用:

WW=W[, rev(seq_len(ncol(W)))]

x=match(data.frame(t(W)), data.frame(t(WW)))
A=cbind( c(1:nrow(W)),x )

Z=t(apply(A,1,sort)) 

x=unique(Z[,2])
W=W[-x,]
因此,在前面的矩阵
W
中,我的代码不起作用,因为代码第二行的结果中有
NA

我们如何解决这个问题?

“有没有办法确定矩阵中的一行是否包含在矩阵中,但包含的方式是相反的?”

是,计算行之间的距离。如果矩阵没有那么大,这是非常有效的:

m <- matrix(c(1, 1, 3, 1, 2, 3, 1, 3, 3, 2, 1, 2, 2, 2, 2, 2, 3, 2, 3, 1, 1, 3, 2, 1, 3, 3, 1), nrow = 3)
res <- as.matrix(dist(rbind(m, 
                            m[, rev(seq_len(ncol(m)))])))
res <- res[nrow(m) + seq_len(nrow(m)), seq_len(nrow(m))]
rownames(res) <- seq_len(nrow(m))

which(!res, arr.ind = TRUE)
#  row col
#3   3   1
#1   1   3

any(!res)
[1] TRUE

m不清楚最后几行应该做什么。您似乎能够找到哪些行是反向的,哪些行不是反向的,因此您的错误似乎与您的书面问题不同(即,是否有任何方法可以找到一行是否为反向重复)。@Axeman,我想列出矩阵中与其他行相反的行。这是我在代码中从第三行到最后一行所做的。好的,
W[!is.na(x),]
将给出在同一矩阵中有反向的行。@Axeman这是正确的,但我希望每对行保留一行。对于pair,我指的是一行和它的倒数。它是有效的,但问题是,正如你所说,我有巨大的矩阵。什么是“巨大的”?你的方法,即使你能修复它,也不能很好地扩展。如果这太慢的话,我会用Rcpp写一个函数。我有300.000行甚至更多行的矩阵。正如我所说,Rcpp的任务(即使那样也不会很快)。您计算过要在那里检查多少行组合了吗?数字是惊人的。是的,是时候擦亮你的C++技能(或者任何编译语言),并访问一个有很多CPU的集群。