r dplyr filter with a dynamic variable name

后端 未结 2 1480
既然无缘
既然无缘 2021-01-12 14:55

I am trying to select only the rows without NAs:

library(dplyr)
x = data.frame(a = c(NA, 2, 3, 4))
var_a <- \"a\"
# This works:
x %>% filter(!is.na(a))         


        
相关标签:
2条回答
  • 2021-01-12 15:03

    Rather than referencing by name of column, just give it the entire column to filter by.

    x = data.frame(a = c(NA, 2, 3, 4))
    var_a <- "a"
    x %>% filter(!is.na(!!x[,var_a])) 
    

    Noticed I've just changed var_a to x[,var_a].

    0 讨论(0)
  • 2021-01-12 15:14

    It is a string, so we can convert to symbol with sym and then use !!

    x %>% 
       filter(!is.na(!!rlang::sym(var_a)))
    #  a
    #1 2
    #2 3
    #3 4
    

    Or another option is to specify the object in filter_at and then do the filtering

    x %>% 
       filter_at(var_a, all_vars(!is.na(.)))
    #  a
    #1 2
    #2 3
    #3 4
    
    0 讨论(0)
提交回复
热议问题