В целом select
и pull
работают как с необработанными именами столбцов (Q1), так и с именами строковых столбцов ("Q1"), но filter
, mutate
, ... ожидают необработанные имена столбцов.
В предположении, что вас действительно интересует только число «Каждый день» в вашем вопросе, которое вы можете сделать с базой R:
my_function_base <- function(survey, question_number) {
sum(survey[[question_number]] %in% "Every day")
}
my_function_base(my_df, "Q2")
# [1] 1
Существует несколько возможностей исправить вашу функцию dplyr. , но здесь есть два варианта.
library(dplyr)
Использование строкового ввода
my_function_str <- function(survey, question_number) {
survey %>%
filter_at(question_number, ~ . == "Every day") %>%
count()
}
my_function_str(my_df, "Q2")
# A tibble: 1 x 1
# n
# <int>
# 1 1
filter_at
работает со строками в качестве ввода и затем фильтрует по указанным столбцам.
Использование NSE: См. Также: https://dplyr.tidyverse.org/articles/programming.html
my_function_nse <- function(survey, question_number) {
question_number <- enquo(question_number)
survey %>%
filter(!!question_number == "Every day") %>%
count()
}
my_function_nse(my_df, Q1) # No quotes around Q1
# A tibble: 1 x 1
# n
# <int>
# 1 2
Данные
my_df <- data.frame(Q1 = c("Every week", "Every day", "Every week", "Every day"),
Q2 = c("Every week", "Every week", "Every week", "Every day"))