You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 18:37:34