首页 > 解决方案 > df <- mpg, col_name <- hwy, 如何调用 mpg$hwy?df[col_name] 不起作用

问题描述

我想打电话给 filter(df, col_name == value)filter(mpg, hwy == 27)但是

df <- mpg
col_name <- 'hwy'
value <- 27
col <- df[col_name]
filter(df, col == value)

产生错误

错误:filter()输入有问题..1。i 输入..1col == value。x object 'value' not found 运行rlang::last_error()以查看错误发生的位置。

我怎样才能纠正col_name <- df[col_name]它不会产生这个错误?我注意到 typeof() 和 class() 对 col (list; tbl_df, tbl, data.frame) 和 mpg$df (int;int) 产生不同的结果。如何将 col(类 tibble 和类型列表的对象)更改为与 mpg$df (int) 相同的类型?


rlang::last_error()给了:

<error/dplyr_error>filter()输入问题..1

i 输入..1.data[["hwy"]] == value

x 列hwy未在.data

回溯:

运行rlang::last_trace()以查看完整的上下文。

标签: rdataframe

解决方案


我们可以使用.data

library(dplyr)
filter(df,  .data[[col_name]] == value)

-输出

# A tibble: 14 x 11
   manufacturer model        displ  year   cyl trans      drv     cty   hwy fl    class     
   <chr>        <chr>        <dbl> <int> <int> <chr>      <chr> <int> <int> <chr> <chr>     
 1 audi         a4             3.1  2008     6 auto(av)   f        18    27 p     compact   
 2 audi         a4 quattro     2    2008     4 auto(s6)   4        19    27 p     compact   
 3 chevrolet    malibu         2.4  1999     4 auto(l4)   f        19    27 r     midsize   
 4 hyundai      sonata         2.4  1999     4 manual(m5) f        18    27 r     midsize   
 5 hyundai      tiburon        2    2008     4 auto(l4)   f        20    27 r     subcompact
 6 nissan       altima         2.4  1999     4 auto(l4)   f        19    27 r     compact   
 7 nissan       altima         3.5  2008     6 manual(m6) f        19    27 p     midsize   
 8 pontiac      grand prix     3.8  1999     6 auto(l4)   f        17    27 r     midsize   
 9 subaru       forester awd   2.5  2008     4 manual(m5) 4        20    27 r     suv       
10 subaru       impreza awd    2.5  2008     4 auto(s4)   4        20    27 r     compact   
11 subaru       impreza awd    2.5  2008     4 manual(m5) 4        20    27 r     compact   
12 toyota       camry          2.2  1999     4 auto(l4)   f        21    27 r     midsize   
13 toyota       camry solara   2.2  1999     4 auto(l4)   f        21    27 r     compact   
14 toyota       camry solara   3.3  2008     6 auto(s5)   f        18    27 r     compact   

或转换为symbol 并评估 (!!

filter(df,  !! rlang::sym(col_name) == value)

注意:这里我们使用

col_name <- "hwy"

推荐阅读