У меня есть большой набор данных (49 столбцов с 16000 строками) в длинном формате. В конечном итоге мне нужно отфильтровать набор данных по уникальным комбинациям определенных пользователем определенных столбцов, чтобы построить другие динамически выбранные столбцы. Построение будет выполнено с использованием ggplots2 и фасетов (x, y, facet_column, facet_row, colorbin).
Вместо того, чтобы показывать свой большой набор данных, я собрал гораздо меньший пример, используя набор данных mtcars, чтобы проиллюстрировать свою проблему. У меня столбцы выводятся правильно, но без серии циклов for я не могу понять, как изменить подмножество.
Настроить данные:
#Load needed libraries
library("dplyr", "tidyr", "ggplot2")
#Convert row.names into a column that can be called
data <- tibble::rownames_to_column(mtcars, "Names")
#Declare groups:
#group_rows are the columns that I need to filter my data based on the unique combinations
# Ultimately, I want to create a new plot of group_cols based on these rows
group_rows <- list(list('cyl', 'gear'), list('vs', 'carb'))
#group_cols are the columns I want included in the plot
group_cols <- list(list('Names', 'mpg','cyl', 'gear'), list('Names', 'wt','vs', 'carb'))
Это работает и дает нужный мне результат, но СУПЕР неудобно
Поскольку я НЕ динамически фильтрую переменную group_rows, мне приходится повторять цикл для каждого варианта списка в group_rows. В моем примере у меня есть только две переменные в каждом списке моих group_rows, но в моем фактическом наборе данных я мог иметь значительно больше.
# Do group_rows 1
for (c in group_cols){
for (var_cyl in unique(data$cyl)){
for (var_gear in unique(data$gear)){
df <- data %>%
filter(cyl==var_cyl &gear==var_gear) %>%
select_(.dots = c)
# enter my plotting function
}
}
}
# Do group_rows 2
for (c in group_cols){
for (var_vs in unique(data$vs)){
for (var_carb in unique(data$carb)){
df <- data %>%
filter(vs==var_vs &carb==var_carb) %>%
select_(.dots = c)
# enter my plotting function
}
}
}