R Shiny表格输出:小数位数设置与值标签显示问题求助
R Shiny表格:小数位数设置与值标签显示问题修复
问题1:小数位数设置无效果
你在DT的options中添加digits=4试图控制小数位数,但DT的配置参数里并没有digits项,因此设置不会生效。
解决方法
有两种可靠方式实现小数位数控制:
方式1:数据汇总时直接格式化
在summarise步骤中用round()函数直接指定mean和se的小数位数:summarise( mean = round(mean(!! rlang::sym(input$question), na.rm = TRUE), 2), se = round(std.error(!! rlang::sym(input$question), na.rm = TRUE), 2) )方式2:DT内置格式化函数
使用DT的formatRound()函数针对指定列设置小数位数:datatable(tab) %>% formatRound(c("mean", "se"), digits = 2)
问题2:分组后仅显示数值,不显示值标签
你用val_lab()给gndr设置了标签,但dplyr的group_by_at()不会保留expss的标签属性,导致输出仅显示原始数值。
解决方法
两种方式可保留/显示值标签:
方式1:转换为因子类型
在数据初始化阶段,直接将gndr转为带标签的因子,分组后自动显示标签:dataset$gndr <- factor(dataset$gndr, levels = c(1,2), labels = c("man", "woman"))方式2:利用expss提取标签
如果要保留expss的标签体系,分组后用as.category()转换列:if(input$group==TRUE) { tab <- dataset %>% group_by_at(input$UV) %>% summarise( mean = round(mean(!! rlang::sym(input$question), na.rm = TRUE), 2), se = round(std.error(!! rlang::sym(input$question), na.rm = TRUE), 2) ) %>% ungroup() %>% mutate(!!input$UV := as.category(!!rlang::sym(input$UV))) }
完整修改后的Server代码片段
server <- function(input, output, session) { output$question_placeholder <- renderUI({ if (input$battery == "A") { choices <- c("A2|Häufigkeit Internetnutzung" = "netusoft", "A4|Vertrauen in Mitmenschen" = "ppltrst") } else if (input$battery == "B") { choices <- c("B1|Interesse an Politik" = "polintr", "B2|Politische Mitsprachemöglichkeit" = "psppsgva", "B3|Fähigkeit politischen Engagements " = "actrolga") } selectInput(inputId = "question", label = "Wählen Sie eine Frage aus", choices, selectize = FALSE) }) output$tabelle <- renderDataTable({ tab <- dataset %>% summarise( mean = round(mean(!! rlang::sym(input$question), na.rm = TRUE), 2), se = round(std.error(!! rlang::sym(input$question), na.rm = TRUE), 2) ) if(input$group==TRUE) { tab <- dataset %>% group_by_at(input$UV) %>% summarise( mean = round(mean(!! rlang::sym(input$question), na.rm = TRUE), 2), se = round(std.error(!! rlang::sym(input$question), na.rm = TRUE), 2) ) %>% ungroup() %>% mutate(!!input$UV := as.category(!!rlang::sym(input$UV))) } datatable(tab) %>% formatRound(c("mean", "se"), digits = 2) }, server = FALSE, options = list( pageLength = 20, searching = FALSE, paging = FALSE, scrollX = TRUE )) }
内容的提问来源于stack exchange,提问作者daniel_gaub
相关产品推荐
相关产品推荐

