【问题标题】:Dplyr programming pattern for mutate用于变异的 Dplyr 编程模式
【发布时间】:2017-09-12 20:06:56
【问题描述】:

在函数内部使用 dplyr mutate 时,我一直在使用标准模式。这是一个玩具示例(仅用于证明一点):

myFunction = function(colname) {
    dots <- setNames(list(lazyeval::interp(~ifelse(x>25, x*10, x/10), x = quote(colname))), "my_new_col")
    mutate_(mtcars, .dots = dots)
}

我已经把它变成了一个函数,而不是每次都输入它。但这相当冗长,我不确定是否有更简单的方法来参数化对 mutate_ 的调用。有什么建议吗?

【问题讨论】:

  • 你想用这段代码做什么?
  • 这只是一个玩具示例。我正在尝试参数化对 dplyr 的 mutate 和过滤器的调用,方法是将它们放在一个函数中。
  • “把它变成了一个不用每次都输入的函数”。准确输入什么?也许您可以提供一个将其放入函数的示例。您的玩具示例中也没有 filter

标签: r nse


【解决方案1】:

我假设您的函数正在尝试基于现有列创建新列。这是使用tidyeval 方法的函数。详情请见Programming with dplyr

myFunction = function(df, col, new_col) {
    col <- enquo(col)
    new_col <- quo_name(enquo(new_col))

    df %>% 
        mutate(!!new_col := ifelse((!!col) > 25, (!!col) * 10, (!!col) / 10))
}

myFunction(mtcars, mpg, mpg_based_new_col)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 2011-08-21
    • 2014-08-19
    • 2020-01-16
    • 2014-06-19
    • 1970-01-01
    相关资源
    最近更新 更多