RShiny中输出变量summary时如何去除var1并重命名var2为Variable?
RShiny统计摘要表格问题修复
问题原因
你把summary()生成的统计结果转成数据框时,R会默认生成两个辅助列:
Var1:仅存储统计项的序号,没有实际展示意义Var2:存储当前选中的变量名,就是你要改名为Variable的列
之前的处理流程没有对这两列做删除、重命名操作,才会出现你说的两个显示问题。
修复后可直接运行的代码
修复点都在数据处理流程里加了注释,同时补了之前缺失的依赖加载、空值防护逻辑:
# 加载依赖包,必须提前运行 library(shiny) library(shinythemes) library(tidyverse) # 注意:运行前请确保你的全局环境中已经读入了名为data的分析数据集 ui <- fluidPage(theme = shinytheme("cerulean"), navbarPage( "My first app", tabPanel("Navbar 1", sidebarPanel( selectInput(inputId="option", label="", c("CHILDREN","FHEAD","FEMALE","ELDERLY","FAMILYSIZE","NOELECTRIC","LOWEDU","GROWTH","POVERTY","ILLITERATE", "NOTRAINING","DPRONE","RENTED","TAPWATER","NOSEWER","POPULATION"), selected="CHILDREN") ), mainPanel( tableOutput("table") ) ), tabPanel("Navbar 2", "This panel is intentionally left blank"), tabPanel("Navbar 3", "This panel is intentionally left blank") ) ) server <- function(input, output) { sum <- reactive({ req(input$option) # 避免初始化阶段输入值为空导致的报错 data %>% select(all_of(input$option)) %>% summary() %>% as.data.frame() %>% # 加convert=TRUE自动把统计值转成数值格式,去掉多余空格 tidyr::separate(Freq, c("Stat", "Value"), sep=":", convert = TRUE) %>% tidyr::pivot_wider(names_from = Stat, values_from = Value) %>% # 修复1:删掉没用的Var1列 select(-Var1) %>% # 修复2:把Var2重命名为Variable rename(Variable = Var2) }) output$table <-renderTable(sum()) } shinyApp(ui = ui, server = server)
补充说明
- 用
all_of()包裹输入的变量名,符合tidyverse最新语法要求,不会出警告 - 如果你的统计结果里存在缺失值,pivot_wider会自动填充为NA,不影响展示
- 如果需要调整表格样式,可以把
tableOutput换成DT::dataTableOutput做更灵活的配置
内容的提问来源于stack exchange,提问作者Alwan Rahmana Subian
相关产品推荐
相关产品推荐

