Dear All, Probably something very easy, but I am looking for the most efficient ways to achieve this. Consider the following snippet y<-c('a','b','c','d','e','f','g') x<-rnorm(length(y)) df<-data.frame(y,x) leading to> df$y[1] a b c d e f g Levels: a b c d e f g Now, I would like to replace levels ('e','f','g') of df$y with a new level 'other' so that levels(df$y) returns a b c d other What is the easiest way to achieve this, considering that df$y[5:7]<-'other' Does not work? Cheers Lorenzo
Hi Lorenzo, On Mon, Mar 25, 2013 at 6:18 PM, Lorenzo Isella <lorenzo.isella at gmail.com> wrote:> Dear All, > Probably something very easy, but I am looking for the most efficient ways > to achieve this. > Consider the following snippet > > y<-c('a','b','c','d','e','f','g') > x<-rnorm(length(y)) > df<-data.frame(y,x) > > leading to > >> df$y > > [1] a b c d e f g > Levels: a b c d e f g > > Now, I would like to replace levels ('e','f','g') of df$y with a new level > 'other' so that levels(df$y) returns > > a b c d other > > What is the easiest way to achieve this,levels(df$y) <- c("a", "b", "c", "d", rep("others", 3)) will do the job. considering that> > df$y[5:7]<-'other' > Does not work?> Cheers > > Lorenzo > > ______________________________________________ > R-help at 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.
Hi, You could also try: library(plyr) df1<- df df2<- df ?df$y<-revalue(df$y,c("e"="others","f"="others","g"="others")) df$y #[1] a????? b????? c????? d????? others others others #or df1$y<-mapvalues(df1$y,from=c("e","f","g"),to=rep("others",3)) levels(df1$y) #[1] "a"????? "b"????? "c"????? "d"????? "others" #or levels(df2$y)[match(c("e","f","g"),levels(df2$y))]<-"others" ?levels(df2$y) #[1] "a"????? "b"????? "c"????? "d"????? "others" A.K. ________________________________ From: Lorenzo Isella <lorenzo.isella at gmail.com> To: "r-help at stat.math.ethz.ch" <r-help at stat.math.ethz.ch> Sent: Monday, March 25, 2013 6:18 PM Subject: [R] Reassign Multiple Factors to same Factor Value Dear All, Probably something very easy, but I am looking for the most efficient ways to achieve this. Consider the following snippet y<-c('a','b','c','d','e','f','g') x<-rnorm(length(y)) df<-data.frame(y,x) leading to> df$y[1] a b c d e f g Levels: a b c d e f g Now, I would like to replace levels ('e','f','g') of df$y with a new level 'other' so that levels(df$y) returns a b c d other What is the easiest way to achieve this, considering that df$y[5:7]<-'other' Does not work? Cheers Lorenzo ______________________________________________ R-help at 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.