R 将列名作为参数传递给管道语句
我浏览了其他问题,知道在大多数情况下,我可以直接将列名作为字符串传递,然后使用d[,column]访问值。但是,我无法在使用管道语句的函数中使用它(该函数接受给定的列并将值舍入到最接近的20): 有什么建议吗 关于joran下面的回答:我如何才能在保持不变的列名之间添加作为参数传递的列名?quote有什么功能 例如R 将列名作为参数传递给管道语句,r,R,我浏览了其他问题,知道在大多数情况下,我可以直接将列名作为字符串传递,然后使用d[,column]访问值。但是,我无法在使用管道语句的函数中使用它(该函数接受给定的列并将值舍入到最接近的20): 有什么建议吗 关于joran下面的回答:我如何才能在保持不变的列名之间添加作为参数传递的列名?quote有什么功能 例如 我相信这可以通过interp从lazyeval获得: library(dplyr) library(lazyeval) d <- data.frame(x = rnorm(1
我相信这可以通过
interp
从lazyeval获得:
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
库(dplyr)
图书馆(懒汉)
d%
变异(时间=interp(引号(plyr::round_any(var,20,f=floor)),
var=as.name(列)))
x时间
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
看看这个,谢谢!这很有效。接下来的问题(为了更好地理解interp是如何工作的——我应该如何向它添加另一列,以便该函数现在采用两个列名?(添加到上面的问题以进行格式设置)@石榴您的附加问题对于count,column1%count(vars=c('y1',column1')没有多大意义
。它的工作原理不同。如果您阅读文档中的非标准评估小插曲,您会发现quote
只是其中一个选项。我选择它是因为在这种情况下,调用另一个函数似乎最简单。
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
}
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