Skip to content

subsetting - questions

7 messages · Muhuri, Pradip (SAMHSA/CBHSQ), Jorge I Velez, arun +1 more

#
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
#
HI,
This should work:
df[df$X1>=8,][-which(names(df)%in% c("X3","X4","X5"))]
#?? X1 X2
#1?? 8? 2
#5? 10? 1
#8?? 8? 5
#9?? 9? 4
#12? 9? 5
#13? 9 10
#19? 9? 8
?df[df$X1>=8,][,!names(df)%in%drop_var]
#?? X1 X2
#1?? 8? 2
#5? 10? 1
#8?? 8? 5
#9?? 9? 4
#12? 9? 5
#13? 9 10
#19? 9? 8
A.K.




----- Original Message -----
From: "Muhuri, Pradip (SAMHSA/CBHSQ)" <Pradip.Muhuri at samhsa.hhs.gov>
To: "r-help at r-project.org" <r-help at r-project.org>
Cc: 
Sent: Friday, November 23, 2012 9:55 PM
Subject: [R] subsetting - questions


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

______________________________________________
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 Arun,

Thank you so much for your help.

Pradip
#
On 2012-11-23 18:55, Muhuri, Pradip (SAMHSA/CBHSQ) wrote:
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
#
Hi Jorge,

I could use subset(). But, I wanted to minimize coding.

Thanks,

Pradip
#
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