如何将列传递给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(未附加)