[R] Identify row indices corresponding to each distinct row of a matrix

Jeff Newmiller jdnewmil @ending from dcn@d@vi@@c@@u@
Thu Nov 8 07:32:12 CET 2018


Perhaps

which( ! duplicated( m, MARGIN=1 ) )

? (untested)

On November 7, 2018 9:20:57 PM PST, Bert Gunter <bgunter.4567 using gmail.com> wrote:
>A mess -- due to your continued use of html formatting.
>
>But something like this may do what you want (hard to tell with the
>mess):
>
>> m <- matrix(1:16,nrow=8)[rep(1:8,2),]
>> m
>      [,1] [,2]
> [1,]    1    9
> [2,]    2   10
> [3,]    3   11
> [4,]    4   12
> [5,]    5   13
> [6,]    6   14
> [7,]    7   15
> [8,]    8   16
> [9,]    1    9
>[10,]    2   10
>[11,]    3   11
>[12,]    4   12
>[13,]    5   13
>[14,]    6   14
>[15,]    7   15
>[16,]    8   16
>> vec <- apply(m,1,paste,collapse="-") ## converts rows into character
>vector
>> vec
>[1] "1-9"  "2-10" "3-11" "4-12" "5-13" "6-14" "7-15" "8-16" "1-9" 
>"2-10"
>"3-11" "4-12" "5-13" "6-14"
>[15] "7-15" "8-16"
>> ## Then maybe:
>> tapply(seq_along(vec),vec, I)
>$`1-9`
>[1] 1 9
>
>$`2-10`
>[1]  2 10
>
>$`3-11`
>[1]  3 11
>
>$`4-12`
>[1]  4 12
>
>$`5-13`
>[1]  5 13
>
>$`6-14`
>[1]  6 14
>
>$`7-15`
>[1]  7 15
>
>$`8-16`
>[1]  8 16
>
>> ## gives the row numbers for each unique row
>
>There may well be slicker ways to do this -- if this is actually what
>you
>want to do.
>
>-- Bert
>
>
>
>On Wed, Nov 7, 2018 at 7:56 PM li li <hannah.hlx using gmail.com> wrote:
>
>> Hi all,
>>    I use the following example to illustrate my question. As you can
>see,
>> in matrix C some rows are repeated and I would like to find the
>indices of
>> the rows corresponding to each of the distinct rows.
>>   For example, for the row c(1,9), I have used the "which" function
>to
>> identify the row indices corresponding to c(1,9). Using this
>approach, in
>> order to cover all distinct rows, I need to use a for loop.
>>    I am wondering whether there is an easier way where a for loop can
>be
>> avoided?
>>    Thanks very much!
>>       Hanna
>>
>>
>>
>> > A <- matrix(c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16),8,2)> B <-
>> rbind(A,A,A)> C <- as.data.frame(B[sample(nrow(B)),])> C   V1 V2
>> 1   1  9
>> 2   2 10
>> 3   3 11
>> 4   5 13
>> 5   7 15
>> 6   6 14
>> 7   4 12
>> 8   3 11
>> 9   8 16
>> 10  5 13
>> 11  7 15
>> 12  2 10
>> 13  1  9
>> 14  8 16
>> 15  1  9
>> 16  3 11
>> 17  7 15
>> 18  4 12
>> 19  2 10
>> 20  6 14
>> 21  4 12
>> 22  8 16
>> 23  5 13
>> 24  6 14> T <- unique(C)> T  V1 V2
>> 1  1  9
>> 2  2 10
>> 3  3 11
>> 4  5 13
>> 5  7 15
>> 6  6 14
>> 7  4 12
>> 9  8 16> > i <- 1                    > which(C[,1]==T[i,1]&
>> C[,2]==T[i,2])[1]  1 13 15
>>
>>         [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide
>> http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>>
>
>	[[alternative HTML version deleted]]
>
>______________________________________________
>R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
>https://stat.ethz.ch/mailman/listinfo/r-help
>PLEASE do read the posting guide
>http://www.R-project.org/posting-guide.html
>and provide commented, minimal, self-contained, reproducible code.

-- 
Sent from my phone. Please excuse my brevity.



More information about the R-help mailing list