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))]

给TA打赏
共{{data.count}}人
人已打赏
解决方案

如何在wpf窗口加载中选中xceedsoftware.checkboxlist控件中的一些项目。

2022-4-21 10:09:03

解决方案

number field is the union of the set of all strings and the set of all numbers. The set of things that can be assigned to a string & number is nothing because there is no overlap in the set of all strings and the set of all numbers.

2022-4-21 10:09:05

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索