Hello Peter,
1. -c("X3", "X4", "X5") For the above variables, class is integer. Arun has suggested the following: df[df$X1>=8,][-which(names(df)%in% c("X3","X4","X5"))] 2. df[df$X1>=8,] [, !names(df) %in% drop_var] I agree - Arun has also suggested the same. Thanks and regards, Pradip ________________________________________ From: Peter Ehlers [ehl...@ucalgary.ca] Sent: Friday, November 23, 2012 10:47 PM To: Muhuri, Pradip (SAMHSA/CBHSQ) Cc: r-help@r-project.org Subject: Re: [R] subsetting - questions On 2012-11-23 18:55, Muhuri, Pradip (SAMHSA/CBHSQ) wrote: > > Hello, > > I have two very basic questions (console attached): > > 1) What am I getting an error message for # 5 and # 7 ? > 2) How to fix the code? > > I would appreciate receiving your help. > > Thanks, > > Pradip Muhuri > > > > ###### Reproducible Example ##### > > N <- 100 > set.seed(13) > df<-data.frame(matrix(sample(c(1:10),N, replace=TRUE),ncol=5)) > > keep_var <- c("X1", "X2") > drop_var <- c("X3", "X4", "X5") > > > df[df$X1>=8,] [,1:2] #1 > df[df$X1>=8,] [,-c(3,4,5)] #2 > df[df$X1>=8,] [,c(-3,-4,-5)] #3 > df[df$X1>=8,] [,c("X1", "X2")] #4 > df[df$X1>=8,] [,-c("X3", "X4", "X5")] #5 DOES NOT WORK > df[df$X1>=8,] [,keep_var] #6 > df[df$X1>=8,] [, !drop_var] #7 DOES NOT WORK To see what's wrong, just print the problematic part: -c("X3", "X4", "X5") You can't negate a character vector; you have to have a numeric vector. And !drop_var doesn't work because you need something that evaluates to a logical value if you want to "!" it. This will do it: df[df$X1>=8,] [, !names(df) %in% drop_var] Or use the subset() function, as Jorge suggests. Peter Ehlers ______________________________________________ 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.