【问题标题】:Using parameters as col names in dplyr在 dplyr 中使用参数作为 col 名称
【发布时间】:2017-10-13 14:22:17
【问题描述】:

我正在努力使用参数和直接从数据框中混合引用列名。请帮我更正第二个函数以返回与第一个函数相同的结果

install.packages("dplyr", version = "0.5.0")`
library(dplyr)

df <- data.frame(year = 2010:2015, GVA = 1:6)
f <- function(df) {
  df %>%
  mutate(indexGVA = GVA/max(ifelse(year == 2010, GVA, 0)) * 100)
}
f(df)

g <- function(df, val = NULL) {
  df %>%
  mutate_(indexGVA = ~val/max(ifelse(year == 2010, val, 0)) * 100)
}
g(df, val = "GVA")

【问题讨论】:

  • 它给出了错误: mutate_impl(.data, dots) 中的错误:二进制运算符的非数字参数

标签: r dplyr nse


【解决方案1】:

mutate_ 现在已弃用 (?mutate_),您可以改为使用 rlang 中的 enquo!! 来引用和取消引用参数:

library(rlang)
g <- function(df, val = NULL) {
  val_quo = enquo(val)
  df %>%
    mutate(indexGVA = (!! val_quo)/max(ifelse(year == 2010, (!! val_quo), 0)) * 100)
}

g(df, val = GVA)

结果:

  year GVA indexGVA
1 2010   1      100
2 2011   2      200
3 2012   3      300
4 2013   4      400
5 2014   5      500
6 2015   6      600

【讨论】:

    猜你喜欢
    • 2021-06-24
    • 1970-01-01
    • 2013-09-20
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多