簡體   English   中英

使用dplyr mutate將列名傳遞給函數,而不使用不推薦使用的mutate_

[英]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_namez轉換為列名稱的字符串。

您的函數將如下所示:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM