【问题标题】:How to use expression list for mutate in dplyr?如何在 dplyr 中使用表达式列表进行变异?
【发布时间】:2021-04-11 23:36:24
【问题描述】:

我发现通常在dplyr 中工作的数据屏蔽在与!! 运算符一起使用时停止工作。

考虑一个简单的例子。

trans <- list(
  a = rlang::expr(val),
  b = rlang::expr(val*2)
)

df <- data.frame(name = c("a", "b"), val = 2:3)

然后,我想使用我的列表 trans 根据来自 name 的值修改 val 列。然后,以下代码将无法正常工作。

library(dplyr)

df %>%
 rowwise() %>%
 mutate(val = !!trans[[ name ]]) 

似乎没有找到name。如果使用普通变量代替数据框中的name 列,则上面的代码将起作用。

我应该如何修改代码以使其按预期工作?谢谢。

【问题讨论】:

    标签: r dplyr rlang


    【解决方案1】:

    您可以使用eval

    library(dplyr)
    
    df %>%
      rowwise() %>%
      mutate(val_res = eval(trans[[name]]))
    
    #  name    val val_res
    #  <chr> <int>   <dbl>
    #1 a         2       2
    #2 b         3       6
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-24
      • 1970-01-01
      • 1970-01-01
      • 2021-03-05
      • 2021-02-21
      • 1970-01-01
      • 2018-05-22
      • 1970-01-01
      相关资源
      最近更新 更多