我做了一个使用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 |
答案 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")