2014-03-27 44 views
0

我有一个矩阵:获得的唯一行indicies在矩阵

 [,1] [,2] [,3] 
    [1,] 23 20 0.00835 
    [2,] 17 28 0.02077 
    [3,] 4 12 0.00600 
    [4,] 11 13 0.00501 
    [5,] 3 10 0.00653 
    [6,] 19 22 0.00371 
    [7,] 1 5 0.00492 
    [8,] 27 2 0.00009 
    [9,] 14 16 0.06497 
[10,] 23 20 0.00835 
[11,] 17 28 0.02077 
[12,] 4 12 0.00600 
[13,] 3 10 0.00653 
[14,] 19 22 0.00371 
[15,] 1 5 0.00492 
[16,] 27 2 0.00009 
[17,] 14 16 0.06497 
[18,] 11 13 0.00501 
[19,] 23 20 0.00835 
[20,] 17 28 0.02077 
[21,] 4 12 0.00600 
[22,] 11 13 0.00501 
[23,] 3 10 0.00653 
[24,] 19 22 0.00371 
[25,] 1 5 0.00492 
[26,] 27 2 0.00009 
[27,] 14 16 0.06497 
[28,] 23 20 0.00835 
[29,] 9 18 0.00509 
[30,] 17 28 0.02077 
[31,] 4 12 0.00600 
[32,] 11 13 0.00501 
[33,] 3 10 0.00653 
[34,] 19 22 0.00371 
[35,] 1 5 0.00492 
[36,] 27 2 0.00009 
[37,] 14 16 0.06497 
[38,] 23 20 0.00835 
[39,] 9 18 0.00509 
[40,] 17 28 0.02077 
[41,] 4 12 0.00600 
[42,] 11 13 0.00501 
[43,] 3 10 0.00653 
[44,] 19 22 0.00371 
[45,] 1 5 0.00492 
[46,] 27 2 0.00009 
[47,] 14 16 0.06497 
[48,] 23 20 0.00835 
[49,] 9 18 0.00509 
[50,] 17 28 0.02077 
[51,] 4 12 0.00600 
[52,] 11 13 0.00501 
[53,] 3 10 0.00653 
[54,] 1 5 0.00492 

,我想获得它独特的行的索引。整行是唯一的(如1,2,3列中的值)非常重要。如果第1列和第2列中的值对于两行是相同的,但第3列中的值是不同的,则应将其视为唯一并保留。

+2

[查找重复行索引]的可能重复(http://stackoverflow.com/ questions/12495345/find-indices-of-duplicated-rows) – zx8754

回答

2

这取决于你想要什么。如果你想从基质中去除重复行,但在离开每个非唯一行的一个典范,下面就可以了(假设你基质被命名为mat):

which(!duplicated(mat)) 

相反,如果您只想要原始矩阵中已经是唯一的行,您需要以下内容(帽子提示到@Marek):

which(!duplicated(mat) & !duplicated(mat, fromLast=TRUE)) 
+0

这也给你重复元素的索引。就像在链接问题中一样,你需要:'哪个(!重复(mat)&!重复(mat,fromLast = TRUE))'。 – Marek

+0

确实如此,但它取决于你想要的东西:你将返回恰好出现一次的元素索引(原始矩阵中唯一的元素)。 Mine会返回一次出现的元素的索引,并且每个元素出现多次(如果使用矩阵上的索引,结果矩阵行将是唯一的)。很好的澄清。 – RoyalTS

+0

问题状态“我想获得唯一行的索引”,所以你的答案不太合适。 – Marek