[R] Romoving elements from a vector. Looking for the opposite of c(), New user
Marc Schwartz
marc_schwartz at comcast.net
Thu Nov 15 20:10:43 CET 2007
Jim,
The one issue with those is that they remove duplicate elements in each
vector before applying their logic. Thus, would not likely work here:
x <- c(3,3,4,4,4,4,5,5,6,8)
z <- c(3,4,4,5,5)
In effect, you end up with:
> unique(x)
[1] 3 4 5 6 8
> unique(z)
[1] 3 4 5
Thus:
> setdiff(x, z)
[1] 6 8
> setdiff(z, x)
numeric(0)
> union(x, z)
[1] 3 4 5 6 8
> intersect(x, z)
[1] 3 4 5
I am also not sure that the two solutions proposed using "%in%" work as
desired, though I may be missing something there.
I may have also missed other solutions in this thread, but here is a
proposal:
x <- c(3,3,4,4,4,4,5,5,6,8)
z <- c(3,4,4,5,5)
for (i in seq(length(z)))
{
Ind <- match(z[i], x)
x <- x[-Ind]
}
> x
[1] 3 4 4 6 8
I think that works.
HTH,
Marc
On Thu, 2007-11-15 at 13:28 -0500, jim holtman wrote:
> You can also check out the 'set' operations: setdiff, intersect, union.
>
> On Nov 15, 2007 12:08 PM, John Kane <jrkrideau at yahoo.ca> wrote:
> > I think you've read Thomas's request in reverse. and
> > what he want is:
> > x[!x %in% z]
> >
> > Thanks for the %in% approach BTW.
> >
> > --- Charilaos Skiadas <cskiadas at gmail.com> wrote:
> >
> > >
> > > On Nov 15, 2007, at 9:15 AM, Thomas Fr��jd
> >
> > wrote:
> > >
> > > > Hi
> > > >
> > > > I have three vectors say x, y, z. One of them, x
> > > contains observations
> > > > on a variable. To x I want to append all
> > > observations from y and
> > > > remove all from z. For appending c() is easily
> > > used
> > > >
> > > > x <- c(x,y)
> > > >
> > > > But how do I remove all observations in z from x?
> > > You can say I am
> > > > looking for the opposite of c().
> > >
> > > If you are looking for the opposite of c, provided
> > > you want to remove
> > > the first part of things, then perhaps this would
> > > work:
> > >
> > > z<-c(x,y)
> > > z[-(1:length(x))]
> > >
> > > However, if you wanted to remove all appearances of
> > > elements of x
> > > from c(x,y), regardless of whether those elements
> > > appear in the x
> > > part of in the y part, I think you would want:
> > >
> > > z[!z %in% x]
> > >
> > > Probably there are other ways.
> > >
> > > Welcome to R!
> > >
More information about the R-help
mailing list