Subset dataframe based on column value using a fun

2019-08-09 15:03发布

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,]

2条回答
我命由我不由天
2楼-- · 2019-08-09 15:52

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]

查看更多
冷血范
3楼-- · 2019-08-09 16:08

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

查看更多
登录 后发表回答