[英]pass a column name to a function using dplyr mutate without using the depreciated mutate_
我意識到這似乎與已經提出的其他問題接近,並且似乎在https://cran.r-project.org/web/packages/dplyr/vignettes/programming.html上得到了回答,但是我在下面顯示的內容似乎遵循了這一建議,但沒有成功。 數據如下:
d<-tibble(y=c(1,2,3,NA))
首先起作用的是:
my.f <- function(df,column_var){
df %>%
mutate(z = y) %>%
filter(!is.na(z))
}
my.f(d,quo(z))
現在,我想產生相同的結果,但是不起作用:
my.f <- function(df,column_var){
df %>%
mutate(!!column_var = y) %>%
filter(!is.na(!!column_var))
}
my.f(d,quo(z))
Error: unexpected '=' in:
" df %>%
mutate(!!column_var ="
要設置變量名稱,您需要在左側使用一個字符串,並在mutate
:=
代替=
。
您可以使用quo_name
將z
轉換為列名稱的字符串。
您的函數將如下所示:
my.f = function(df, column_var) {
column_var = enquo(column_var)
df %>%
mutate(!!quo_name(column_var) := y) %>%
filter( !is.na(!!column_var) )
}
my.f(d, z)
# A tibble: 3 x 2
y z
<dbl> <dbl>
1 1 1
2 2 2
3 3 3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.