Dplyr编写一个以列名作为输入的函数
我正在编写一个函数,我将在dplyr中的多个列上使用它,但是我在将列名作为输入传递给dplyr函数时遇到了问题 下面是我想做的一个例子:Dplyr编写一个以列名作为输入的函数,r,dplyr,R,Dplyr,我正在编写一个函数,我将在dplyr中的多个列上使用它,但是我在将列名作为输入传递给dplyr函数时遇到了问题 下面是我想做的一个例子: df<-tbl_df(data.frame(group=rep(c("A", "B"), each=3), var1=sample(1:100, 6), var2=sample(1:100, 6))) example<-function(colname){ df %>% group_by(group)%>% su
df<-tbl_df(data.frame(group=rep(c("A", "B"), each=3), var1=sample(1:100, 6), var2=sample(1:100, 6)))
example<-function(colname){
df %>%
group_by(group)%>%
summarize(output=mean(sqrt(colname)))%>%
select(output)
}
example("var1")
我发现了一些类似的问题,但没有什么可以直接应用到我的问题上,所以非常感谢您的帮助。我尝试了一些涉及eval的解决方案,但我真的不知道我应该传递给eval的确切内容。这是您所期望的吗
df<-tbl_df(data.frame(group=rep(c("A", "B"), each=3), var1=sample(1:100, 6), var2=sample(1:100, 6)))
example<-function(colname){
df %>%
group_by(group)%>%
summarize(output=mean(sqrt(colname)))%>%
select(output)
}
example( quote(var1) )
#-----
Source: local data frame [2 x 1]
output
1 7.185935
2 8.090866
df%
汇总(输出=平均值(sqrt(colname)))%>%
选择(输出)
}
示例(引用(var1))
#-----
来源:本地数据帧[2 x 1]
输出
1 7.185935
2 8.090866
在R3.6/dplyr 0.8中,接受的答案不再有效
根据建议,可以使用!!as.name()
这对我很有用:
df<-tbl_df(data.frame(group=rep(c("A", "B"), each=3), var1=sample(1:100, 6), var2=sample(1:100, 6)))
example<-function(colname){
df %>%
group_by(group)%>%
summarize(output=mean(sqrt(!!as.name(colname)))%>%
select(output)
}
example( quote(var1) )
quote()
当然可以用引号代替“
”是的,这很完美。谢谢,我担心答案会复杂得多。我不是一个大的dplyr用户,所以我想知道为什么需要函数select
。(在我做过的少量(n=1)测试中,取出它似乎不会影响行为。)@BondedDust不需要它。使用summary()。您可以安全地删除它。@StevenBeaupréno,因为没有名为var1的对象
df<-tbl_df(data.frame(group=rep(c("A", "B"), each=3), var1=sample(1:100, 6), var2=sample(1:100, 6)))
example<-function(colname){
df %>%
group_by(group)%>%
summarize(output=mean(sqrt(!!as.name(colname)))%>%
select(output)
}
example( quote(var1) )
example_mutate<-function(colname){
df %>%
mutate(!!colname := sqrt(!!as.name(colname)))
}
example_mutate( quote(var1) )