【问题标题】:Using case_when() inside a function to refer to column names that is passed to the function在函数内部使用 case_when() 来引用传递给函数的列名
【发布时间】:2023-02-03 00:45:30
【问题描述】:

我正在尝试在函数中使用 case_when() 。该函数的想法是获取指定的列,在其中搜索特定的术语,然后如果该术语在该列中则返回 true,否则返回 false。

但是,我正在努力尝试使 case_when 引用在函数级别传入的列 - 至少,我成功完成它的方式似乎有点老套,因为我传入了一个字符串,然后将其转换为符号,然后将其传递给 case_when。有没有一种方法可以直接在 case_when 中更动态地引用列?:

test_tibble <- tibble(col_a = c("Here I am", "Nope", "Nothing", "I am here"))

test_function <- function(target_item,
                          data = test_tibble,
                          variable_name,
                          prefix = "check_") {
  
  variable_name <- as.symbol(variable_name)
  
  data <- 
    data %>% 
    mutate("{prefix}{target_item}" := case_when(grepl(target_item, {{variable_name}}) ~ TRUE,
                                                TRUE ~ FALSE))
  
  return(data)

}

test_function("ere", variable_name = "col_a")

在实际用例中,我可能需要引用许多不同的命名列,因此我可以在函数顶部指定列名很重要。

【问题讨论】:

  • 您要将列名作为字符串还是作为符号传递?

标签: r dplyr tidyverse


【解决方案1】:

如果你想传入一个字符串,使用

test_function <- function(target_item,
                          data = test_tibble,
                          variable_name,
                          prefix = "check_") {

  data <- 
    data %>% 
    mutate("{prefix}{target_item}" := case_when(grepl(target_item, .data[[variable_name]]) ~ TRUE,
                                                TRUE ~ FALSE))
  
  return(data)
  
}

test_function("ere", variable_name = "col_a")

如果你想传入一个符号,使用

test_function <- function(target_item,
                          data = test_tibble,
                          variable_name,
                          prefix = "check_") {

  data <- 
    data %>% 
    mutate("{prefix}{target_item}" := case_when(grepl(target_item, {{variable_name}}) ~ TRUE,
                                                TRUE ~ FALSE))
  
  return(data)
  
}

test_function("ere", variable_name = col_a)

【讨论】:

    猜你喜欢
    • 2014-03-05
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    • 2015-12-13
    • 1970-01-01
    • 1970-01-01
    • 2021-02-15
    相关资源
    最近更新 更多