首页 文章

在带引号变量的函数中使用dplyr n_distinct

提问于
浏览
4

我正在尝试在函数中使用dplyr,将列名作为变量传入,然后在汇总函数中与n_distinct一起使用 .

我理解用dplyr进行编程变得更容易了,使用了summary_(arrange)(nse)中描述的summarize,arrange_ etc函数 . 我也尝试过来自lazyeval的各种interp组合 . 带有“输入到n_distinct()的n_distinct响应必须是来自数据集的单个变量名称”(这是有意义的,它只是我在字符串中有变量名...)

这在函数外部工作正常(提到data.frame中的列名):

summarize(data, count=n_distinct(mention))

这是我的第一次努力:

getProportions <- function(datain, id_column) {
    overall_total <- summarize(datain, count=n_distinct(id_column))[1,1]
}

getProportions(measures, "mention")

在阅读了NSE文档和一些关于使用dplyr进行编程的线程之后,我尝试了:

overall_total <- summarize_(datain, count=interp(~n_distinct(var),var=as.name(id_column)))[1,1]

但无济于事 . 有任何想法吗?几乎看起来需要n_distinct_()?

Edit 我的道歉和感谢 . 你是对的,interp版本确实有效,似乎我从来没有完全击中那个完整的组合 . 我查看了我的旧版本,当我将var部分改为正确时,我使用了plain summary(),当我使用summarize_()时,我停止了inter =调用的var =部分 . 叹 . 我没有用两个版本生成一个完整的工作示例 .

1 回答

  • 2

    正如评论中所指出的,正确的方法是我的第二个选项,显然我从未完全测试过(我留下了var = interp调用的一部分 . ):

    f <- function(data, col) {
            summarise_(data, count = interp(~n_distinct(var), var = as.name(col)))
    }
    f(mtcars, "cyl")
    

相关问题