如何将反应对象添加到输出表中的辅助列标题?

2023-12-12

我正在开发一个转换表模块,并正在努力解决如何使用户可以理解输出的问题。我曾经在Excel中准备转换表;使表格清晰易读非常容易,但导出表格输出的数据需要几个小时。现在我的问题与 R 相反:需要几秒钟才能从数百万行数据生成表输出,但表表示远非简单。

首先,我想反映用户的“From”输入(对象transFrom) 在此反应表的辅助列标题中,如下图所示;关于如何做到这一点有什么建议吗?我对html完全一无所知。我在这里找到了这个解决方案R Shiny 应用程序 - 渲染具有双标题的数据表,我喜欢它,因为它使用 DT,我在整个过程中都使用它(尽管我更喜欢基本 R 表,使用 ShinyrenderTable(),但我无法做到这一点)。我对此进行了研究,并找到了其他用于起草漂亮表格的软件包,但我避免“软件包膨胀”,而宁愿坚持使用基础R, Shiny, data.table, and DT如果可能的话,打包。

请注意,列反映了过渡状态 FROM,行反映了过渡状态 TO。

enter image description here

以下是主动渲染上述内容的 MWE 代码:

library(data.table)
library(dplyr)
library(shiny)

# custom table container
sketch = htmltools::withTags(table(
  class = 'display',
  thead(
    tr(
      th(colspan = 1, ''),
      th(colspan = 10, 'From state where initial period is =  ')
    ),
    tr(
      lapply(colnames(results), th)
    )
  )
))


data <- 
  data.frame(
    ID = c(1,1,1,2,2,2,3,3,3),
    Period = c(1, 2, 3, 1, 2, 3, 1, 2, 3),
    Values = c(5, 10, 15, 0, 2, 4, 3, 6, 9),
    State = c("X0","X1","X2","X0","X2","X0", "X2","X1","X0")
  )

ui <- fluidPage(
  tags$head(tags$style(".datatables .display {margin-left: 0;}")), # < left-align the table
  h4(strong("Base data frame:")), 
  tableOutput("data"),
  h4(strong("Transition table inputs:")),
  numericInput("transFrom", "From period:", 1, min = 1, max = 3),
  numericInput("transTo", "To period:", 2, min = 1, max = 3),
  h4(strong("Output transition table:")), 
  DTOutput("results"),
)

server <- function(input, output) {

  numTransit <- function(x, from=1, to=3){
    setDT(x)
    unique_state <- unique(x$State)
    all_states <- setDT(expand.grid(list(from_state = unique_state, to_state = unique_state)))
    dcast(x[, .(from_state = State[from], 
                to_state = State[to]), 
            by = ID]
          [,.N, c("from_state", "to_state")]
          [all_states,on = c("from_state", "to_state")], 
          to_state ~ from_state, value.var = "N"
    )
  }
  
  results <- 
    reactive({
      results <- numTransit(data,input$transFrom,input$transTo) %>% 
        replace(is.na(.), 0) %>%
        bind_rows(summarise_all(., ~(if(is.numeric(.)) sum(.) else "Sum")))
      results <- cbind(results, Sum = rowSums(results[,-1]))
    })

  output$data <- renderTable(data)
  
  output$results <- renderDT(server=FALSE,{
    results() %>% 
      datatable(rownames = FALSE,
                filter = 'none',
                container = sketch,
                options = list(scrollX = F
                               , dom = 'ft'
                               , lengthChange = T
                               , pagingType = "numbers"  # hides Next and Previous buttons
                               , autoWidth = T
                               , info = FALSE #  hide the "Showing 1 of 2..." at bottom of table
                               ,searching = FALSE  # removes search box
                          ),
                class = "display"
              )
  })

}

shinyApp(ui, server)

看起来htmltools::withTags使用闪亮的输入效果不佳(我提出了一个问题here).

请检查以下内容:

library(DT)
library(shiny)
library(htmltools)
library(data.table)

data <- 
  data.frame(
    ID = c(1,1,1,2,2,2,3,3,3),
    Period = c(1, 2, 3, 1, 2, 3, 1, 2, 3),
    Values = c(5, 10, 15, 0, 2, 4, 3, 6, 9),
    State = c("X0","X1","X2","X0","X2","X0", "X2","X1","X0")
  )

numTransit <- function(x, from=1, to=3){
  setDT(x)
  unique_state <- unique(x$State)
  all_states <- setDT(expand.grid(list(from_state = unique_state, to_state = unique_state)))
  dcast(x[, .(from_state = State[from], 
              to_state = State[to]), 
          by = ID]
        [,.N, c("from_state", "to_state")]
        [all_states,on = c("from_state", "to_state")], 
        to_state ~ from_state, value.var = "N"
  )
}

ui <- fluidPage(
  tags$head(tags$style(".datatables .display {margin-left: 0;}")), # < left-align the table
  h4(strong("Base data frame:")), 
  tableOutput("data"),
  h4(strong("Transition table inputs:")),
  numericInput("transFrom", "From period:", 1, min = 1, max = 3),
  numericInput("transTo", "To period:", 2, min = 1, max = 3),
  h4(strong("Output transition table:")), 
  DTOutput("resultsDT"),
)

server <- function(input, output, session) {
  results <- 
    reactive({
      results <- numTransit(data, input$transFrom, input$transTo) %>% 
        replace(is.na(.), 0) %>%
        bind_rows(summarise_all(., ~(if(is.numeric(.)) sum(.) else "Sum")))
      results <- cbind(results, Sum = rowSums(results[,-1]))
    })
  
  output$data <- renderTable(data)
  
  output$resultsDT <- renderDT(server=FALSE, {
    req(results())
    datatable(
      data = results(),
      rownames = FALSE,
      filter = 'none',
      container = tags$table(
        class = 'display',
        tags$thead(
          tags$tr(
            tags$th(colspan = 1, ''),
            tags$th(colspan = 10, sprintf('From state where initial period is = %s', input$transFrom))
          ),
          tags$tr(
            lapply(colnames(results()), tags$th)
          )
        )
      ),
      options = list(scrollX = F
                     , dom = 'ft'
                     , lengthChange = T
                     , pagingType = "numbers"  # hides Next and Previous buttons
                     , autoWidth = T
                     , info = FALSE #  hide the "Showing 1 of 2..." at bottom of table
                     , searching = FALSE  # removes search box
      ),
      class = "display"
    )
  })
  
}

shinyApp(ui, server)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将反应对象添加到输出表中的辅助列标题? 的相关文章

  • 为什么在 HTML 中使用 onClick() 是一种不好的做法?

    我多次听说使用 JavaScript 事件 例如onClick 在 HTML 中是一种不好的做法 因为它不利于语义 我想知道以下代码有什么缺点以及如何修复 a href link a 你可能正在谈论不引人注目的 JavaScript htt
  • PHP MySQL 使用选项/选择 HTML 表单标签进行多重搜索查询

    我正在尝试使用两个搜索字段设置基本的 MySQL LIKE 搜索 我不想拥有它 所以它有多个可选搜索字段 例如if isset POST city isset POST name 我不知道如何用 HTML 来做到这一点
  • html 和 body 元素的高度

    我一直在互联网上查找 min height 和 height 属性如何在 body 和 html 元素上工作 我在很多地方都看到过下面的代码 html height 100 body min height 100 上面的内容可以与其他一些
  • PyCharm 中有 HTML 块 {%%} 的快捷方式吗?

    我正在使用 HTML 块 例如 block content 经常使用 但必须输入括号和百分比符号很麻烦 有没有捷径或其他方法可以自动执行此操作 到目前为止我刚刚发现这个 PyCharm 中有插入 的快捷方式吗 https stackover
  • 将样式添加到 mat-autocomplete 的 mat-option

    我有这个 HTML代码在这里 https stackblitz com edit angular mat autocomplete with selected value vx1uqg file src 2Fapp 2Fautocomple
  • 如何按 data.table 中的十分位数组计算统计数据

    我有一个 data table 想按组计算统计数据 R set seed 1 R DT data table a rnorm 100 b rnorm 100 这些组应该定义为 R quantile DT a probs seq 1 9 1
  • Flexbox 不适用于 iPad 和 Safari [重复]

    这个问题在这里已经有答案了 我在网站上使用 Flexbox 但它在 iPad Air iPad 3 和 Safari PC 上崩溃 设计和代码与此 codepen 类似 http codepen io anon pen xwJzEg htt
  • r 中的 5 维图

    我正在尝试在 R 中绘制 5 维图 我目前正在使用rgl包以 4 个维度绘制数据 使用 3 个变量作为 x y z 坐标 另一个变量作为颜色 我想知道是否可以使用这个包添加第五个变量 例如空间中点的大小或形状 这是我的数据和当前代码的示例
  • 带 R 的多彩标题

    我想添加颜色某些词在我的图表标题中 我已经能够在这里找到一些先例 http blog revolutionanalytics com 2009 01 multicolor text in r html 具体来说 我希望用撇号括起来的文本 在
  • 物化模式覆盖整个页面(模式弹出窗口未带到前台)

    由于保密原因 我无法上传 Web UI 的屏幕截图 物化模态应该表现得像here http materializecss com modals html 但不幸的是 我的网站发生的情况是 包括模式在内的整个页面都是 深色背景 的一部分 模式
  • R - 通过覆盖和递归合并列表

    假设我有两个带有名字的列表 a list a 1 b 2 c list d 1 e 2 d list a 1 b 2 b list a 2 c list e 1 f 2 d 3 e 2 我想递归地合并这些列表 如果第二个参数包含冲突的值 则
  • R:将 JSON 时间格式转换为 POSIX

    我有一个 JSON 字符串 并将其放入数据框中 我能够做到这一点 但我在使用 apply 函数之一将所有时间字符串转换为 POSIX 格式时遇到问题 See here https stackoverflow com questions 90
  • ggplot散点图中的图例问题

    我想使用 ggplot 创建显示方法比较数据的散点图 绘图应包含原始数据 理想线和带误差的拟合线 图例应显示理想线和拟合线的线型 线宽 线颜色 我可以获得大部分我想要的东西 但是图例存在以下问题 图例显示每种线型有 2 条线 为什么 如何解
  • 在requestAnimationFrame中使用clearRect不显示动画

    我正在尝试在 HTML5 画布上做一个简单的 javascript 动画 现在我的画布是分层的 这样当我收到鼠标事件时 背景层不会改变 但带有头像的顶层会移动 如果我使用 requestAnimationFrame 并且不清除屏幕 我会看到
  • 将div设置为隐藏,延时后可见

    我试图在 X 时间后 也许甚至在随机时间之后 但现在我们只做固定时间 在黑色背景上出现一个黄色方块 function initialSetup if document getElementById yellow null document
  • HTML 中部分着色的阿拉伯语单词

    我不会说阿拉伯语 但我需要我们网站上对阿拉伯语的具体支持 我需要将部分阿拉伯语单词放在 span 与单词其他部分的风格不同 当我输入两个字符时 and 它们被组合成word 但是当我使用 HTML 标记时 span span 这些字母在输出
  • ggplot2、R 中的单条形条形图

    我有以下数据和代码 gt ddf var1 var2 1 aa 73 2 bb 18 3 cc 9 gt gt dput ddf structure list var1 c aa bb cc var2 c 73L 18L 9L Names
  • R 中的 Websocket

    我设法在 R 中建立到 Mtgox websocket 的连接 规格如下 url https socketio mtgox com mtgox Currency USD https socketio mtgox com mtgox Curr
  • 非闪亮上下文中的反应式对象绑定

    实际问题 你怎样才能近似反应性环境 行为 http shiny rstudio com tutorial lesson6 建立者shiny http shiny rstudio com函数 或者甚至可能在一个函数中使用这些函数无光泽上下文以
  • FireFox 中的“contenteditable = true”高度问题

    当有空的时候div with contenteditable true CSS contenteditable true border 1px dashed dedede padding 3px HTML div div 在 IE 和 Ch

随机推荐

  • 如何将应用程序片段设置为仅纵向模式?

    我有一个 Android 应用程序 它有一个主要活动和 3 个选项卡片段 我希望应用程序始终保持纵向模式 但我似乎无法正常工作 这是我尝试过的 根据另一篇堆栈溢出帖子 但我不确定我做错了什么 如果使用片段 它是否需要有所不同
  • IntelliJ IDEA:如何将项目库与pom.xml中的依赖项同步?

    当我更改项目 具有多个模块 的 pom xml 之一中的依赖项版本时 我会在项目结构的 库 部分中看到新版本和旧版本 例如 最近我将Drools从5 4版本更改为5 5版本 当我进入 库 部分时 我看到了这两个库 因此我手动删除了 5 4
  • SSL 操作失败,代码 1:dh 密钥太小

    我正在通过 SSL 连接到我的数据库 Google Cloud SQL 我使用 codeigniter 3 0 来执行此操作 尽管 mysqli 驱动程序进行了一些修改以允许此功能 几个月来一直运作良好 然而它just开始返回此警告 Mes
  • 无法从“浮动”转换?浮

    我有这个代码 public float InputCutOffFrequency get set fc public float InputF1 get set public float InputF2 get set public flo
  • 将 Google 地图 v2 转换为 google 地图 v3

    我的网站当前正在运行 Google 地图 API v2 我想转换为新的 Google 地图 API v3 下面的代码需要做哪些修改 最近收到一条消息 说v2被禁用了 所以我需要用当前功能修改现有脚本
  • EnumDataTypeAttribute 应该在使用实体框架的 .NET 4.0 中正常工作吗?

    我有一个枚举 我想将其作为某种值保留到底层数据库中 以便我可以来回调用它 我读过一些文章 建议创建一个枚举包装器 其中定义了静态隐式运算符 并使用 ComplexType 对象映射进行映射 如下面的链接所述 如何在 EF4 中伪造枚举 这个
  • 让 AppleScript 填写表单

    我遇到的问题让我生病了 我正在研究一个苹果脚本 它会引发填写表单的操作 我认为我在等待网站 100 加载时遇到了问题 该脚本激活站点但不填写表单 请引导我并帮助制定这个懒惰的脚本 tell application Safari set lo
  • 如何控制 python 解释器中的数字格式?

    我经常使用 python 解释器进行快速数值计算 并希望使用指数表示法等自动打印所有数值结果 有没有办法为整个会话设置这个 例如 我想要 gt gt gt 1 e12 1 0e 12 not gt gt gt 1 e12 100000000
  • PDO:使用准备好的语句选择返回列名

    我正在尝试使用已准备好列的准备好的语句 i e SELECT FROM users 现在如果我把这通常可以工作 SELECT id FROM users 但是执行第一个语句时 值是列名 id id 0 0 我做错了什么 或者这可能吗 不 您
  • 将 int 分成低位整数

    我有一个 30 60 范围内的随机整数 我使用它randint 30 60 假设它是 40 我想将这个数字拆分为 7 个随机整数 例如 5 5 5 5 5 5 10 是一个有效的结果 但有很多可能的解决方案 就像这个一样 6 6 6 6 6
  • nginx 入口控制器忽略 css 和 js 文件 - google kuberenetes 引擎

    我创建了一个链接到两个服务的 nginx 入口控制器 网站工作正常 但 js 和 css 文件未加载到 HTML 页面 404 错误中 我使用 helm 创建了 nginx pod 并将 nginx 配置包含在 ingress yaml 中
  • 运行Android项目时出现“无法找到com_facebook_android.apk错误”

    我已经在 Eclipse 中安装了适用于 Android 的 Facebook API 并将该项目导入到我的 Android 项目中 我的程序构建得非常好 但是当我尝试运行它时 我得到了 找不到 com facebook android a
  • ASP.NET AJAX 和保持会话活动 - 标准方法是什么?

    长期 ASP NET Webforms 开发人员 Ajax 开发新手 主要通过 UpdatePanel 控件 由于没有发生回发 即使用户正在与页面交互并刷新页面的一部分 服务器也不会重置用户的会话超时计数器 我想知道当使用 UpdatePa
  • Eclipse 升级杀死了 PyDev

    我刚刚在 Ubuntu 上升级了 Eclipse 版本 现在每当我打开 Python 文件时 它都会在外部窗口中打开 并且我在 Eclipse 中打开的现有 Python 文件显示 无法打开编辑器 没有 id org json 的编辑器描述
  • 字段modifyDate永远不会被分配,并且始终具有默认值0

    有人可以向我解释一下为什么我会收到此警告吗 我已经测试了代码并且它有效 我得到了我应该在那里获得的值 这是错误的警告还是我遗漏了什么 DataMember Name modifyDate private long modifyDate pu
  • 计算元组列表中的重复项

    我有一个元组列表 a 1 2 1 4 1 2 6 7 2 9 我想检查每个元组的单个元素之一是否与另一个元组中的相同位置 元素匹配 以及这种情况发生了多少次 例如 如果某些元组中只有第一个元素有重复 则返回该元组以及它重复的次数 我可以使用
  • cakephp:删除单选按钮中所有选项中的星星

    我的表单中有一个单选按钮 使用以下代码 echo form gt input Users vote array type gt radio label gt array text gt form vote true class gt vot
  • 某些字体大小在 Safari (iPhone) 上呈现得更大

    是否有 CSS 或其他原因导致 Safari iPhone 会忽略某些字体大小设置 在我的特定网站上 iPhone 上的 Safari 呈现的一些 font size 13px 文本大于 font size 15px 文本 它可能不支持某些
  • 使用 jQuery 在 iframe 中获取 HTML

    这是我的情况 我有一个名为iframe html 其中包含图像幻灯片的代码 代码有点像 用户可以使用嵌入代码将幻灯片添加到他们的博客或网站 可以来自不同的域 假设用户必须将幻灯片嵌入index html 他们可以通
  • 如何将反应对象添加到输出表中的辅助列标题?

    我正在开发一个转换表模块 并正在努力解决如何使用户可以理解输出的问题 我曾经在Excel中准备转换表 使表格清晰易读非常容易 但导出表格输出的数据需要几个小时 现在我的问题与 R 相反 需要几秒钟才能从数百万行数据生成表输出 但表表示远非简