[R] subsetting - questions

Muhuri, Pradip (SAMHSA/CBHSQ) Pradip.Muhuri at samhsa.hhs.gov
Sat Nov 24 06:05:34 CET 2012



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 [ehlers at ucalgary.ca]
Sent: Friday, November 23, 2012 10:47 PM
To: Muhuri, Pradip (SAMHSA/CBHSQ)
Cc: r-help at 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




More information about the R-help mailing list