基于列的子集在矩阵中查找唯一元素

时间:2014-02-03 14:15:47

标签: r matrix duplicates

我有一张表,我想要转换

     t LabelA LabelB start stop
 [1,]  1      4      9     1    2
 [2,]  1      3      5     1    2
 [3,]  1      1      6     1    2
 [4,]  2      4      9     1    2
 [5,]  2      3      5     1    2
 [6,]  2      1      6     1    2
 [7,]  2      7      2     2    2
 [8,]  3      3      5     3    4
 [9,]  3      1      6     3    4
[10,]  3      7      2     3    5
[11,]  3      4      9     3    5

我希望以这样的方式过滤数据:第一列中只有不同数字的行被删除(不是完全而是仅重复)。因此,对于第1行和第4行,只有第1行应保留在表中。或者对于第3行和第9行,仅保留第9行。重要的是保留第一列中的信息,并且表中最早出现的信息在表中重新出现而不是其他事件。

2 个答案:

答案 0 :(得分:1)

您可以使用duplicated

mat[!duplicated(as.data.frame(mat[, -1])), ]

      t LabelA LabelB start stop
[1,]  1      4      9     1    2
[2,]  1      3      5     1    2
[3,]  1      1      6     1    2
[7,]  2      7      2     2    2
[8,]  3      3      5     3    4
[9,]  3      1      6     3    4
[10,] 3      7      2     3    5
[11,] 3      4      9     3    5

其中mat是矩阵的名称。

答案 1 :(得分:0)

尝试使用重复功能:

mymx <- matrix(c(1,4,9,1,2 ,1,3,5,1,2 ,1,1,6,1,2 ,2,4,9,1,2 ,2,3,5,1,2 ,2,1,6,1,2 ,2,7,2,2,2 ,3,3,5,3,4 ,3,1,6,3,4 ,3,7,2,3,5 ,3,4,9,3,5), ncol=5, byrow=T)
mymx[!duplicated(mymx[,-1]),]

> mymx[!duplicated(mymx[,-1]),]
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    4    9    1    2
[2,]    1    3    5    1    2
[3,]    1    1    6    1    2
[4,]    2    7    2    2    2
[5,]    3    3    5    3    4
[6,]    3    1    6    3    4
[7,]    3    7    2    3    5
[8,]    3    4    9    3    5