带矢量输入的Dplyr条件列ifelse

时间:2018-01-04 18:42:24

标签: r dplyr nse rlang

我正在尝试使用dplyr的新NSE语言方法来创建条件变异,使用矢量输入。我遇到麻烦的地方是将列设置为等于它自己,请参见下面的mwe:

df <- data.frame("Name" = c(rep("A", 3), rep("B", 3), rep("C", 4)), 
                 "X" = runif(1:10), 
                 "Y" = runif(1:10)) %>% 
    tbl_df() %>% 
    mutate_if(is.factor, as.character)

ColToChange <- "Name"
ToChangeTo <- "Big"

现在,使用以下内容:

df %>% mutate( !!ColToChange := ifelse(X >= 0.5 & Y >= 0.5, ToChangeTo, !!ColToChange))

ColToChange值设置为Name,而不是恢复为原始值。因此,我试图使用上面的语法来实现这一目标:

df %>% mutate( !!ColToChange := ifelse(X >= 0.5 & Y >= 0.5, ToChangeTo, Name))

但不是Name,而是将其作为向量。

1 个答案:

答案 0 :(得分:5)

您需要先使用SELECT id, COUNT(*) FROM completed_consumers WHERE consu_id=$consu_id GROUP BY consu_id rlang:sym评估为符号ColToChange,然后将其评估为Name列:

!!