【发布时间】:2017-06-30 12:18:12
【问题描述】:
我想转换这个数据框
data <- data.frame(color=c("red","red","red","green","green","green","blue","blue","blue"),object=c("box","chair","table","box","chair","table","box","chair","table"),units=c(1:9),price=c(11.5,12.5,13.5,14.5,15.5,16.5,17.5,18.5,19.5))
给另一个人
output <- data.frame(color=c("red","green","blue"),units_box=c(1,4,7),price_box=c(11.5,14.5,17.5), units_chair=c(2,5,8),price_chair=c(12.5,15.5,18.5),units_table=c(3,6,9),price_table=c(13.5,16.5,19.5))
因此,我使用reshape2::melt 和reshape2::dcast 来构建一个用户定义的函数,如下所示
fun<-function(df,var,group){
r<-reshape2::melt(df,id.vars=var)
r<-reshape2::dcast(r,var~group)
return(r)
}
当我使用如下函数时
乐趣(数据、颜色、对象)
我收到以下错误消息
melt_check 中的错误(数据,id.vars,measure.vars,variable.name, value.name) : 找不到对象“颜色”
你知道我该如何解决吗?我认为问题在于我应该用引号调用reshape2::melt 中的变量,但我不知道如何。
注意1:我想保留变量的原始数字格式(即没有小数的对象和带一位小数的价格)
注意 2:我想说明的是,我的真实代码(这只是一个简化的示例)要长得多,并且涉及 dplyr 函数(包括 enquo() 和 UQ() 函数)。因此,这种情况的解决方案应该与dplyr 兼容。
注 3:我不使用 tidyr(我是整个 tidyverse 的一大乐趣),因为当前的 tidyr 仍然使用旧语言进行函数,并且我与其他可能不愿意使用的人共享脚本tidyr的开发版。
【问题讨论】: