dplyr:在select_()和mutate()中使用环境变量

时间:2017-03-17 17:55:45

标签: r dplyr

我做了一个使用dplyr的函数。我可以使用get()select_()选择参数,但不能为mutate()选择参数。

这是我使用的代码。

创建测试数据:

test <- tibble(Q1=c(NA,NA,NA,4,5),
       Q2=c(1,2,NA,NA,NA),
       Q3=c(NA,NA,3,NA,NA),
       Group=c("B", "B", "C", "A", "A"))

这会返回错误。

## Create y column
create_y <- function(x1, x2, x3, Group){
    length <- length(x1)
    res <- c()
    for (i in 1:length){
        if(Group[i]=="A")
            res <- c(res, x1[i])
        if(Group[i]=="B")
            res <- c(res, x2[i])
        if(Group[i]=="C")
            res <- c(res, x3[i])
    }
    return(res)
}

reg_figure <- function(var1, var2, var3){
    test %>% select_(.dots=c(get("var1"), get("var2"), get("var3"), "Group")) %>%
    mutate(y=create_y(as.name(get("var1")), as.name(get("var2")), as.name(get("var3")), Group))
}

reg_figure("Q1", "Q2", "Q3") # error

我想要一个这样的结果:

| Q1 | Q2 | Q3 | Group | y |
|----|----|----|-------|---|
| NA | 1  | NA | B     | 1 |
| NA | 2  | NA | B     | 2 |
| NA | NA | 3  | C     | 3 |
| 4  | NA | NA | A     | 4 |
| 5  | NA | NA | A     | 5 |

1 个答案:

答案 0 :(得分:1)

使用.[[get("var1")]]将一列tibble作为向量。

reg_figure <- function(var1, var2, var3){
    test %>% select_(.dots=c(get("var1"), get("var2"), get("var3"), "Group")) %>%
    mutate(y=create_y(.[[get("var1")]], .[[get("var2")]], .[[get("var3")]], Group))
}
reg_figure("Q1", "Q2", "Q3")