An option is to create a logical column for that. Below, the 'flag' with TRUE values indicate 'winter', 'spring' and the FALSE would be automatically the res i.e. 'summer', fall' (assuming there are only 4 season in the data)
regular_season$flag <- with(regular_season, season %in%
c('winter', 'spring'))
Then, use split with 'category', 'question' and 'flag' instead of 'season'
lst1 <- split(regular_season, regular_season[c('category', 'question',
'flag')], drop = TRUE)
Or another option is group_split from dplyr
library(dplyr)
regular_season %>%
group_split(category, question, flag = season %in% c('winter', 'spring'))
Or if we prefer to have a concatenated 'season' as new 'season'
regular_season %>%
group_split(category, question,
season_concat = case_when(season %in% c('winter', 'spring')
~ 'winter_spring', TRUE ~ 'summer_fall'))