【问题标题】:Curly curly - How to access the variable name [duplicate]Curly curly - 如何访问变量名[重复]
【发布时间】:2021-09-29 00:11:35
【问题描述】:

我正在尝试创建一个函数来汇总分组数据集,然后添加一列来标识正在汇总的变量(ID 列)。

我不确定如何使用 curly curly 方法添加 ID 列。

my_fun <- function(dat, var_name){
  dat %>%
    mutate(id_column = names({{var_name}}))
}

my_fun(mtcars, cyl)

我想要的是将变量名(在本例中为 cyl)回收。

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    刚开始,deparse/subsitute

    my_fun <- function(dat, var_name){
     nm1 <- deparse(substitute(var_name))
      dat %>%
        mutate(id_column = nm1)
    }
    

    -测试

    my_fun(mtcars, cyl)
                      mpg cyl  disp  hp drat    wt  qsec vs am gear carb id_column
    Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4       cyl
    Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4       cyl
    Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1       cyl
    Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1       cyl
    Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2       cyl
    Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1       cyl
    Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4       cyl
    Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2       cyl
    Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2       cyl
    Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4       cyl
    ...
    

    tidyverse 中,也可以直接从符号完成,即使用ensym 转换为符号,然后评估(!!) 以获取值或使用as_string 转换为字符串

    my_fun <- function(dat, var_name){
      var_name <- rlang::ensym(var_name)
      dat %>%
        mutate(id_column = rlang::as_string(var_name), val_column = !! var_name)
    }
    

    -测试

    my_fun(head(mtcars), cyl)
                   mpg cyl disp  hp drat    wt  qsec vs am gear carb id_column val_column
    Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4       cyl          6
    Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4       cyl          6
    Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1       cyl          4
    Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1       cyl          6
    Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2       cyl          8
    Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1       cyl          6
    

    【讨论】:

      猜你喜欢
      • 2020-12-06
      • 1970-01-01
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      • 2021-02-11
      • 2018-09-08
      • 2022-12-28
      • 2020-11-25
      相关资源
      最近更新 更多