我正在尝试在函数中使用dplyr,将列名作为变量传入,然后在汇总函数中与n_distinct一起使用.
据我所知,使用dtlyr进行编程变得更容易,使用了summary(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_()?
编辑
我的道歉和感谢.你是对的,interp版本确实有效,似乎我从来没有完全击中那个完整的组合.我查看了我的旧版本,当我将var部分改为正确时,我使用了简单的summary(),当我使用summarize_()时,我离开了inter =调用的var =部分.叹.我没有用两个版本生成一个完整的工作示例.
最佳答案 正如评论中所指出的,正确的方法是我的第二个选项,显然我从未完全测试过(我留下了var = interp调用的一部分.):
f <- function(data, col) {
summarise_(data, count = interp(~n_distinct(var), var = as.name(col)))
}
f(mtcars, "cyl")