R将分组列作为字符串传递给函数参数汇总。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R将分组列作为字符串传递给函数参数汇总。相关的知识,希望对你有一定的参考价值。

在下面的代码中:

# data frame df has columns A, B, C, D, E and few more
tmp = group_by( df, A, B, C, D)
tmp = summarise( tmp, NewColumn = min( E))

我想改变列 E 在第二行中加入一个sting或任何格式,允许在一个函数中加入这两行代码,即(一种可能的格式)。

getSummary = function( tmp = NULL, col2pass = 'E') {

                       tmp = group_by( df, A, B, C, D)
                       tmp = summarise( tmp, NewColumn = min( col2pass))

                       return( tmp)
             }

我试过了 tmp[ , colnames( tmp)[[ index_of_E]]], tmp[ 'E'] 或者只是 "E" 但这显然是行不通的;在前两种情况下,分组丢失了,而在第二种情况下,字符串被解释为一个字面字符串。

谢谢你

答案

你面临着一个棘手的问题,那就是用标准评价的方法来处理 dplyr. 如果你开始使用变量名编写函数,你可能会发现 data.table 更容易处理(你有例子在 我的帖子)

dplyr

随着 dplyr 你可以用 rlang 来取消变量的引号。

tmp = summarise( tmp, NewColumn = min(!!rlang::sym(col2pass)))

你也可以使用 {{}} 取消引号的语法是(近况):

tmp = summarise(tmp, NewColumn = min({{col2pass}}))

数据表

你可以写。

library(data.table)
setDT(tmp)
tmp[, .('NewColumn' = get(col2pass))]
另一答案

我们可以用 summarise_at

library(dplyr)
tmp %>%
     summarise_at(vars(col2pass), min) 

以上是关于R将分组列作为字符串传递给函数参数汇总。的主要内容,如果未能解决你的问题,请参考以下文章

在 R 中,如何将参数作为字符串传递给像 plotXtabs2 这样的函数?

将字符串传递给 R 函数参数,但稍后用作另一个函数的参数名称

仅将一些参数作为 R 中的命名列表传递给函数

如何在用户定义的函数中将数据库列作为参数传递?

如何将二维数组类型 char(字符串)作为函数参数传递?

如何在 R 中使用颜色十六进制值作为函数参数?