11

我的问题似乎很简单,但是几个小时以来我都无法解决它……

我有一个这样的矩阵:

      [,1] [,2]
[1,]    1    2
[2,]    2    1
[3,]    2    1
[4,]    3    4

我想选择具有相同信息的行,而不考虑列的顺序。例如 row1 (1;2) 和 row2 (2;1)。然后,我想删除它们,除了一个。

这个函数我写过,但是不行……</p>

f<-function(x){
     i<-1
     repeat
     {
     a<-c()
     a<-c(which(x[i,1]==x[,2] & x[i,2]==x[,1]))
          if(!is.null(a)) {x<-x[-c(a),]}
          if(i>=nrow(x)) {break} else {i<-i+1}
     }
     x
} 
f(data)

有人可以给我一个提示吗?

4

1 回答 1

15

像这样:

unique(t(apply(mat, 1, sort)))

请注意,输出行已排序,因此例如c(5, 1)原始数据中的“不匹配”行将显示为c(1, 5)输出中。相反,如果您希望输出行与输入中的一样,那么您可以执行以下操作:

mat[!duplicated(t(apply(mat, 1, sort))), ]
于 2013-10-29T02:11:11.657 回答