我试图在dplyr(R)中的函数调用中使用group_by,得到了意想不到的结果.下面是我try 做的一个例子:

df = data.frame(a = c(0,0,1,1), b = c(0,1,0,1), c = c(1,2,3,4))

result1 = df %>%
  group_by(a,b) %>%
  mutate(d = sum(c))
result1$d

myFunc <- function(df, var) {
  output = df %>%
    group_by(a,!!var) %>%
    mutate(d = sum(c))
  return(output)
}

result2 = myFunc(df,"b")
result2$d

结果1$d得到[1,2,3,4],这是我所期望的.结果2$d产生了[3,3,7,7],这是我不想要的,我不确定发生了什么.

将b(不带引号)作为函数参数,并用{var}}代替!!不幸的是,在我的例子中,我的列名是字符串格式的(但也许有一种方法可以事先转换字符串,以便它可以使用{}}符号?)

推荐答案

如果要传递可以引用数据帧某列的字符对象,应使用!!sym(var):

myFunc <- function(df, var) {
  output = df %>%
    group_by(a, !!sym(var)) %>%
    mutate(d = sum(c))
  return(output)
}

myFunc(df, "b")

如果要传递数据掩码参数,应使用{{ var }}或等效的!!enquo(var):

myFunc <- function(df, var) {
  output = df %>%
    group_by(a, {{ var }}) %>%
    mutate(d = sum(c))
  return(output)
}

myFunc(df, b)

注意,在这两种不同的情况下,我分别将"b"b传递给函数.

R相关问答推荐

在' geom_contour_filled()'中对齐两个gplot的 colored颜色 比例

使用lares::corr_var函数在for循环中分配变量的问题

从具有随机模式的字符串中提取值

MCMC和零事件二元逻辑回归

selectInput不返回ALL,并将因子转换为shiny 的数字

如何将dygraph调用到R Markdown作为一个shiny 的react 对象的参数?

如何从R中的字符串元素中减go 一个数字?

在GGPLATE中将突出的点放在前面

在使用tidyModels和XGBoost的二进制分类机器学习任务中,所有模型都失败

SHINY:使用JS函数应用的CSS样式显示HTML表格

如何识别倒排的行并在R中删除它们?

您是否可以使用facet_rap设置一个较低的限制来对ggmap上的比例中断进行zoom ?

R:用GGPLATE,如何在两个独立的变量中制作不同形状的散点图?

有没有可能用shiny 的书签恢复手风琴面板?

如何平滑或忽略R中变量的微小变化?

为什么在写入CSV文件时Purrr::Pwalk不起作用

如何在使用Alpha时让geom_curve在箭头中显示恒定透明度

如何根据其他列中的两个条件来计算数据帧中的行之间的差异?

主题(Legend.key=Element_RECT(Fill=&Quot;White&Quot;))不起作用

R-如何在ggplot2中显示具有不同x轴值(日期)的多行?