基于DataFrame列创建含主选项与子选项的pickerInput组件
动态生成带层级选项的pickerInput组件
需求
基于给定的DataFrame,创建pickerInput组件,以Dimension作为一级选项,Subdimension作为对应二级选项;当前仅包含environmental维度,后续新增维度时代码需自动适配。
原始数据
df <- structure(list(Dimension = c("environmental", "environmental", "environmental", "environmental", "environmental", "environmental", "environmental", "environmental", "environmental", "environmental", "environmental", "environmental", "environmental", "environmental", "environmental", "environmental", "environmental", "environmental", "environmental", "environmental", "environmental", "environmental", "environmental", "environmental", "environmental", "environmental", "environmental", "environmental", "environmental", "environmental", "environmental", "environmental", "environmental", "environmental", "environmental", "environmental", "environmental", "environmental", "environmental", "environmental", "environmental", "environmental" ), Subdimension = c("A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C")), row.names = c(NA, -42L), class = c("tbl_df", "tbl", "data.frame"))
实现步骤
1. 生成嵌套选项列表
先对数据去重并按维度分组,提取每个维度对应的唯一子维度,构建符合pickerInput要求的嵌套列表:
library(dplyr) library(purrr) # 处理数据生成层级选项 choices_list <- df %>% distinct(Dimension, Subdimension) %>% # 去除重复的维度-子维度组合 group_split(Dimension) %>% # 按维度分组 set_names(map_chr(., ~first(.$Dimension))) %>% # 给列表命名为维度名称 map(~.$Subdimension) # 提取每个维度下的子维度
2. 创建pickerInput组件
用生成的choices_list创建带层级的选择器:
library(shinyWidgets) pickerInput( inputId = "dimension_subdim_picker", label = "选择维度及子维度", choices = choices_list, multiple = TRUE, options = list(`actions-box` = TRUE) )
说明
- 代码会自动识别DataFrame中的所有
Dimension,后续新增维度时,只需更新DataFrame,无需修改pickerInput的配置 distinct保证每个子维度在对应维度下只出现一次,避免重复选项actions-box = TRUE开启全选/取消全选的操作按钮,提升多选体验
内容的提问来源于stack exchange,提问作者firmo23
相关产品推荐
相关产品推荐

