[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