I would like to filter the data frame to leave only complete cases based on the selected columns. This is easy to do with NSE filter() :
library(dplyr) dd <- data.frame( id = 1:4, var1 = c(1, 2, NA, 4), var2 = c(1, NA, 3, 4), var3 = c(1, NA, NA, NA)) dd1 <- dd %>% filter(complete.cases(var1, var2)) dd1 #> id var1 var2 var3 #> 1 1 1 1 1 #> 2 4 4 4 NA
However, I am on the wall trying to create an SE version of this operation, to which I can pass the quoted column names.
library(lazyeval) filtered_cols <- c("var1", "var2") dots <- interp(~complete.cases(x), .values = list(x = filtered_cols)) dd2 <- dd %>% filter_(.dots = dots) #> Error in eval(substitute(expr), envir, enclos): incorrect length (2), expecting: 4 str(dots) #> Class 'formula' language ~complete.cases(c("var1", "var2")) #> ..- attr(*, ".Environment")=<environment: R_GlobalEnv>
Unfortunately, filtered_cols parsed as a character vector. How can I get interp() to handle filtered_cols as multiple column names to be passed to complete.cases() ?
source share