如何将列传递给arrange()和mutate()

如何将列传递给arrange()和mutate(),r,dplyr,R,Dplyr,我想要一个使用dplyr的函数,它看起来像下面的AddPercentColumns() AddPercentColumns% 排列(描述(列))%>% 突变(百分比=列/和(列)*100)%>% 突变(累积=累积总和(百分比)) } 然而,我很难理解如何应对NSE。我可能会传入一个列名字符串,并使用arrange\uuz()和mutate\uz(),但我不确定如何处理desc()、sum()和cumsum() 如何使用dplyr编写此函数?我发现sprintf()比paste()更容易阅读。下

我想要一个使用
dplyr
的函数,它看起来像下面的
AddPercentColumns()

AddPercentColumns%
排列(描述(列))%>%
突变(百分比=列/和(列)*100)%>%
突变(累积=累积总和(百分比))
}
然而,我很难理解如何应对NSE。我可能会传入一个列名字符串,并使用
arrange\uuz()
mutate\uz()
,但我不确定如何处理
desc()
sum()
cumsum()

如何使用
dplyr
编写此函数?

我发现
sprintf()
paste()
更容易阅读。下面的函数看起来调试起来很有趣,但它完成了任务

AddPercentColumn%
排列(sprintf(“描述(%s)”,列))%>%
突变(百分比=sprintf(“%s/sum(%s)*100”,列,列))%>%
突变(累积=“累积(百分比)”)
}

虽然不是超级干净…

根据康拉德的建议,我在发布另一个解决方案,随着它的发展:

AddPercentColumns%
排列(bquote(desc(col))%>%
突变率(百分比=bquote((列)/sum((列))*100))%>%
突变(累积=累积总和(百分比))
}

绝对更干净、更易于调试和可读。

谢谢,Gregor!我在下面贴了一些东西…没有必要在最后一行使用
mutate\uuuu
mutate
效果很好。此外,我非常反对在我要合作的任何项目中使用字符串。它是有效的,但它是对类型系统的严重滥用。在此处使用表达式和/或
lazyeval
。事实上,我认为dplyr甚至接受这段代码都是一个错误。除此之外,非字符串版本中表达式的第一部分可以如下所示:
arrange_uUte(bquote(desc((col)))
-假设我们事先捕获了未计算的列名:
col=substitute(col)
。管道的第二部分遵循等价性。删除我之前的评论,这是一个更好的解决方案。它使用的是
plyr::“
”吗?我猜不是。bquote()来自base,bquote帮助特别提到了。()。此外,我还通过名称空间加载了plyr(未附加)