Прежде всего, извините за несколько неинформативный заголовок
У меня есть блестящее приложение, в котором пользователь загружает один из множества возможных наборов данных и для некоторых столбцов может выполнить фильтр для вывода вывода data.frame
Я хочу стандартизировать код независимо от загруженного набора данных
Проблема в том, что имена столбцов различаются по набору данных, и будет иметь место переменное число столбцов, которые я хочу отфильтровать на
Что касается создания входных данных, я адаптировал это решение , используя подход tidyeval. Однако у меня возникли проблемы с выводом без необходимости прибегать к множеству операторов if else, основанных на количестве столбцов, которые можно отфильтровать по
Вот пример (не блестящий), основанный на наборе данных, где у меня есть 2 фильтруемых столбца, столбец значения, который всегда требуется, и один столбец, нежелательный в конечном выводе
library(tidyverse)
## desired columns
my_cols <- c("col 1", "another col")
# selected input
input_1 <- c("A","B")
input_2 <- c("Z")
l <- list(`col 1` = rep(c("A","B","C"),times=3), `another col` =
rep(c("X","Y","Z"),each=3), Value = c(1:9),`Unwanted 1`=(9:1))
df <- as_tibble(l)
# this creates the right number of correctly-named columns
for (i in seq_along(my_cols)) {
assign(paste0("col_", i), sym(my_cols[i]))
}
## This produces output but wish to adapt
## to varying number of columns
df %>%
filter(!!col_1 %in% input_1) %>%
filter(!!col_2 %in% input_2) %>%
select(!!col_1, !!col_2, Value)
# `col 1` `another col` Value
# <chr> <chr> <int>
# 1 A Z 7
# 2 B Z 8
Так что это последний кусок кода, который я хочу адаптировать для учета переменной длины my_cols
ТИА