我需要使用用户定义的函数绑定两个data.frames。例如,让我们假设数据框看起来像这样。
library(dplyr)
library(lazyeval)
df<-data.frame(type1=c("a","b","c","a","b","c",NA),type2=c("d","e","f","d","e","f","f"))
f<-function(x){
y<-df%>%
dplyr::filter_(lazyeval::interp(~!is.na(x),x=as.name(x)))%>%
dplyr::group_by_(x)%>%
dplyr::summarize("Sum"=sum(type2=="d"))
y<-dplyr::bind_rows(y,data.frame(x="Total",Sum=sum(y$Sum)))
return(y)
}
result_f<-f("type1")
问题是该函数假定第二个数据帧中变量“Total”的名称是“x”而不是“Total”,由于与第一个数据帧不匹配而创建了一个额外的列。
该函数如何将x解释为变量而不是字符串? Unquoting?怎么样?
答案 0 :(得分:1)
您可以将功能中的最后一行更改为
y <- dplyr::bind_rows(y,setNames(data.frame("Total",sum(y$Sum)), c(x, "Sum")))
这会将您尝试绑定的data.frame的名称设置为原始名称。
在花费太多时间学习dplyr中的所有下划线函数之前,请注意在下一个版本(0.6)中,它们将被完全不同的非标准评估方法所取代。在此处阅读更多内容:https://blog.rstudio.org/2017/04/13/dplyr-0-6-0-coming-soon/