[R] Identify row indices corresponding to each distinct row of a matrix
Bert Gunter
bgunter@4567 @ending from gm@il@com
Thu Nov 8 16:42:56 CET 2018
Yes -- much better than mine. I didn't know about the MARGIN argument of
duplicated().
-- Bert
On Wed, Nov 7, 2018 at 10:32 PM Jeff Newmiller <jdnewmil using dcn.davis.ca.us>
wrote:
> 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.
>
[[alternative HTML version deleted]]
More information about the R-help
mailing list