我浏览了其他问题,并且知道在大多数情况下,我可以直接将列名作为字符串传递,然后使用d [,column]来访问值。但是,我无法在使用管道语句的函数中使用它(该函数使用给定的列并将值舍入到最接近的20):
fun = function(mydata, column) {
new = mydata %>%
mutate(time = plyr::round_any(column, #also tried mydata[,column]
20, f = floor))
return(new)
}
有关如何执行此操作的任何建议吗?
参考下面的joran答案:我如何能够在保持不变的列名之间添加作为参数传递的列名?引用有什么功能?
E.g。
fun2 = function(d, column, column2) {
d %>%
mutate_(time = interp(quote(plyr::round_any(var,20,f = floor)),
var = as.name(column))) %>%
count_(CONSTANT_COL_NAME, interp(var, var=as.name(column2)), CONSTANT_COL_NAME2) #Line in question
}
答案 0 :(得分:2)
我相信这可以使用 lazyeval 中的interp
:
library(dplyr)
library(lazyeval)
d <- data.frame(x = rnorm(10,300,20))
column <- "x"
> d %>%
mutate_(time = interp(quote(plyr::round_any(var,20,f = floor)),
var = as.name(column)))
x time
1 299.8697 280
2 271.5919 260
3 298.2845 280
4 276.3756 260
5 312.3145 300
6 289.7780 280
7 305.9819 300
8 290.5856 280
9 306.8417 300
10 336.2645 320