dplyr mutate 替换动态变量名

dplyr mutate replace dynamic variable name

以下代码将 hwy > 25 的值替换为 1,否则为 0。

library(ggplot2)
data(mpg)
mpg %>% mutate(hwybin=replace(hwy>25,1,0))

如何将 hwy 替换为变量名。大致如下:

varname <- "hwy"
mpg %>% mutate(hwybin=replace(varname>25,1,0))

我觉得我遗漏了一些明显的东西。谢谢。

我会这样做:

library(data.table)
mybin <- function(DF,var,thresh,suffix="bin")
  DF %>% mutate(x = + ( .[[var]] > thresh )) %>% setnames("x", paste0(var,suffix)) %>% `[`

mpg %>% mybin("hwy",25)

我确定 data.table 的 setnames 有一些 dplyr 风味的替代品,但我不知道。

不妨将评论变成答案(并使您的问题可重现):

library(dplyr)
library(ggplot2)
library(lazyeval)

data(mpg)

a <- mpg %>% mutate(hwybin=replace(hwy>25, 1 ,0))

varname <- "hwy"
b <- mpg %>% mutate_(hwybin=interp(~replace(varname>25, 1 ,0),
                                   varname=as.name(varname)))

identical(a, b)
## [1] TRUE