Subset dataframe based on column value using a fun

2019-08-09 15:10发布

问题:

I am trying to subset a dataframe with the following function.

SubsetDF <- function(DF, VAR, YEAR){
   DF2 <- DF[DF$VAR <= YEAR, ]
   return(DF2)
 }

test <- SubsetDF(myData, "YEAR", 2000)

The resulting "test" is empty. What am I missing here? By the way, if I just do below, then the resulting dataframe is fine.

 myData[myData$YEAR <= 2010,]

回答1:

Try

SubsetDF <- function(DF, VAR, YEAR){
   DF2 <- DF[DF[VAR] <= YEAR, ]
   return(DF2)
 }

test <- SubsetDF(myData, "YEAR", 2000)

Just replace the DF$VAR part with DF[VAR]



回答2:

An approach using non-standard evaluation

d <- data.frame(YEAR = 1996:2005, x = 1:10)

test <- function(df, name, year){
  df[eval(substitute(name), df) <= year, ]
}

test(d, YEAR, 2000)

Notice that the year variable is not passed as a character (this is what is meant by non-standard evaluation). For more on non-standard evaluation read this http://adv-r.had.co.nz/Computing-on-the-language.html