Thank you, David and Gabor, for the creative solutions, and for introducing
me to pmin()

Jonathan



On Thu, May 20, 2010 at 9:55 PM, Gabor Grothendieck <ggrothendi...@gmail.com
> wrote:

> Try this one liner.  The first argument of rep is the sorted
> intersection and the second argument is the calculated from the
> parallel minimum of the counts of elements in a that are also in b and
> the counts of elements in b that are also in a.
>
> rep(sort(intersect(a, b)), pmin(table(a[a %in% b]), table(b[b %in% a])))
>
> It does have the advantage of not introducing factors.
>
> On Thu, May 20, 2010 at 6:24 PM, Jonathan <jonsle...@gmail.com> wrote:
> > Thanks, but that doesn't quite work, since I'd want the result of b[b
> %in%
> > a] to be symmetric with a[a%in%b] (so if there are two 2's in EACH
> vector,
> > I'll get two 2's in the result, but if there are two 2's in only one
> vector,
> > but one two in the other, the result will show only one 2.
> >
> > Consider:
> >
> >> a <- c(2,4,3)
> >> b<-c(6,6,5,2,2,8,4)
> >
> >> b[b %in% a]
> > [1] 2 2 4
> >
> >> a[a%in%b]
> > [1] 2 4
> >
> > The second answer is correct, but I can't predict which variable to put
> in
> > which position in the statement, so I'd need them both to be correct.
> >
> > Best,
> > Jonathan
> >
> > On Thu, May 20, 2010 at 6:10 PM, David Winsemius <dwinsem...@comcast.net
> >wrote:
> >
> >>
> >> On May 20, 2010, at 5:58 PM, Jonathan wrote:
> >>
> >>  Hi all,
> >>>  The ?intersect entry kindly points out that it discards duplicate
> >>> entries.  I'm looking, however, to get the intersection while KEEPING
> >>> duplicate entries, and there are no instructions on how to accomplish
> this
> >>> using intersect().
> >>>
> >>> Does anybody have any idea how this might be done, or am I going to
> need
> >>> to
> >>> program something from scratch (something like ordering the vectors and
> >>> then
> >>> looping through them)?
> >>>
> >>>
> >>>
> >>> ex:
> >>>
> >>>  a <- c(2,4,2,3)
> >>>> b<-c(6,6,5,2,2,8,4)
> >>>> intersect(a,b)
> >>>>
> >>> [1] 2 4
> >>>
> >>
> >> > b %in% a
> >> [1] FALSE FALSE FALSE  TRUE  TRUE FALSE  TRUE
> >>
> >> # Now use logical indexing on "b"
> >>
> >> > b[b %in% a]
> >> [1] 2 2 4
> >>
> >>
> >>>
> >>>
> >>> I'd hope the answer to be 2 2 4.
> >>>
> >>> Regards,
> >>> Jonathan
> >>>
> >>>        [[alternative HTML version deleted]]
> >>>
> >>> ______________________________________________
> >>> R-help@r-project.org mailing list
> >>> 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.
> >>>
> >>
> >> David Winsemius, MD
> >> West Hartford, CT
> >>
> >>
> >
> >        [[alternative HTML version deleted]]
> >
> > ______________________________________________
> > R-help@r-project.org mailing list
> > 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@r-project.org mailing list
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.

Reply via email to