[R] which() and value replacement in a matrix

Liaw, Andy andy_liaw at merck.com
Sat Oct 9 23:26:20 CEST 2004


Use matrix indexing, instead of generating the index vector:

> x <- as.data.frame(x)
> x[x > 25] <- -999
> x
     V1   V2   V3
1     7   14   16
2    20   24    8
3    17   18   11
4    19 -999 -999
5    23    4   15
6  -999 -999    5
7    21    9   12
8    22    2    3
9  -999   13    1
10    6   10   25

Andy

> From: Patrick Giraudoux
> 
> Thanks for the clue.
> 
> Actually the trouble comes when refering to a data.frame. If 
> I use the matrix from the data.frame (matrix(mydataframe)), everything
> goes smoothly...
> 
> So I wrote:
> 
> indices<-which(myforetbin > 0,arr.ind=T)
> myforetbin<-as.matrix(myforetbin)
> myforetbin[indices]<-1
> myforetbin<-as.data.frame(myforetbin)
> 
> It works but I wonder if there are no more simple ways...
> 
> All the best,
> 
> Patrick
> 
> 
> ----- Original Message ----- 
> From: "Liaw, Andy" <andy_liaw at merck.com>
> To: "'Patrick Giraudoux'" <patrick.giraudoux at univ-fcomte.fr>; 
> "r-help" <r-help at stat.math.ethz.ch>
> Sent: Saturday, October 09, 2004 3:00 PM
> Subject: RE: [R] which() and value replacement in a matrix
> 
> 
> > Use the index vector directly, rather than breaking it up:
> >
> > > x <- matrix(sample(30), 10, 3)
> > > idx <- which(x > 25, arr.ind=TRUE)
> > > idx
> >      row col
> > [1,]   6   1
> > [2,]   9   1
> > [3,]   4   2
> > [4,]   6   2
> > [5,]   4   3
> > > x[idx] <- 999
> > > x
> >       [,1] [,2] [,3]
> >  [1,]    7   14   16
> >  [2,]   20   24    8
> >  [3,]   17   18   11
> >  [4,]   19  999  999
> >  [5,]   23    4   15
> >  [6,]  999  999    5
> >  [7,]   21    9   12
> >  [8,]   22    2    3
> >  [9,]  999   13    1
> > [10,]    6   10   25
> >
> > HTH,
> > Andy
> >
> > > From: Patrick Giraudoux
> > >
> > > Hi,
> > >
> > > I cannot go through the archives with which() as key-word...
> > > so common. Though I am sure to have seen something about 
> this subject
> > > in the past could somebody put me on the track. I have a
> > > matrix (actually a data.frame) in which I would replace the
> > > non-null values
> > > by 1.
> > >
> > > I tried the following:
> > >
> > > indices<-which(myforetbin > 0,arr.ind=T)
> > > myforetbin[indices[,1],indices[,2]]<-1
> > >
> > > and get the message:
> > >
> > > > myforetbin[indices[,1],indices[,2]]<-1
> > > Error in "[<-.data.frame"(`*tmp*`, indices[, 1], indices[,
> > > 2], value = 1) :
> > >         duplicate subscripts for columns
> > >
> > > I get the same with
> > >
> > > myforetbin[indices]<-1
> > >
> > > However, with:
> > >
> > > myforetbin[indices]
> > >
> > > I well get a vector with the corresponding non-null values.
> > >
> > > Can somebody put me on the track?
> > >
> > > All the best,
> > >
> > > Patrick
> > >
> > > ______________________________________________
> > > R-help at stat.math.ethz.ch mailing list
> > > https://stat.ethz.ch/mailman/listinfo/r-help
> > > PLEASE do read the posting guide!
> > > http://www.R-project.org/posting-guide.html
> > >
> > >
> >
> >
> > 
> --------------------------------------------------------------
> ----------------
> > Notice:  This e-mail message, together with any 
> attachments, contains information of Merck & Co., Inc. (One 
> Merck Drive,
> Whitehouse Station, New Jersey, USA 08889), and/or its 
> affiliates (which may be known outside the United States as 
> Merck Frosst,
> Merck Sharp & Dohme or MSD and in Japan, as Banyu) that may 
> be confidential, proprietary copyrighted and/or legally privileged. It
> is intended solely for the use of the individual or entity 
> named on this message.  If you are not the intended 
> recipient, and have
> received this message in error, please notify us immediately 
> by reply e-mail and then delete it from your system.
> > 
> --------------------------------------------------------------
> ----------------
> 
> 
>




More information about the R-help mailing list