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