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

R 基于列的子集查找矩阵中的唯一元素,r,matrix,duplicates,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,

我有一张桌子要改造

     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行。重要的是保留第一列中的信息,并且表中保留最早出现的行,而不是其他事件。

您可以使用重复的

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
是矩阵的名称。

尝试使用复制函数:

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
mymx mymx[!重复(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

能否指定所需的输出