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

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(使用前将#替换为@)

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

  • 闪亮的本地部署错误:输入字符串 1 无效 UTF-8

    我很惊讶地发现一个突然的错误 我的 ShinyApp 停止工作并出现未知错误 提示 输入字符串 1 无效 UTF 8 即使在昨天 该应用程序也可以正常运行 但是突然停止了 下面是我运行时的错误描述runApp gt runApp Liste
  • 在 R 中查找 Windows 用户名

    有没有办法在 R 会话中获取当前的 Windows 用户名或 Windows 主目录 Thanks 抱歉 如果我错过了什么 但我找不到任何东西 你可以做 Sys getenv USERNAME Sys getenv HOME 如果你只是输入
  • 使用相同图像映射的多个图像 - 如何在单击时返回正确的图像参考?

    我在一个页面上有多个图像 所有图像都使用相同的图像映射 我需要知道用户点击了哪个图像 问题是 this 返回对的引用 area 而不是 img 这是代码 img src image png img src image png img src
  • 如何在 R 中更新和重新编译 nlme 源代码

    我正在尝试更新 nlme 包 以便我可以在 gls 命令中使用大圆距离进行相关性 我正在尝试使用指定的更改来编辑源代码here http r 789695 n4 nabble com nlme spatial autocorrelation
  • 基础 5 显示模态不起作用

    祝大家有美好的一天 我在我的迷你项目中使用 Foundation 5 我想使用框架的显示 模式功能 但似乎不起作用 索引 html
  • HTML 表格信息

    我想知道是否有任何方法可以使 html 中的表格看起来像这样 http i43 tinypic com 21dml8l png http i43 tinypic com 21dml8l png 我基本上需要第一列中的 1 个大单元格 然后第
  • 如何在双对数图(ggplot2)中添加趋势线?

    我需要绘制一个遵循幂律分布的数据向量 所以如果我将它们绘制在对数轴上 它们将是一条直线 但是 如果我没有明确提供 y 参数 我不知道如何绘制 这是代码 library poweRlaw library ggplot2 xmin 1 alph
  • 使用 ggplot 将条形图的列与线图的点对齐

    当线图的点与条形图的条具有相同的 x 轴时 有什么方法可以使用 ggplot 将它们对齐 这是我尝试使用的示例数据 library ggplot2 library gridExtra data data frame x rep 1 27 e
  • 悬停时的 SVG 过滤器标签

    我正在尝试通过此过滤器对 SVG 进行动画处理
  • 为什么我无法使用 HTML5 音频标签多次播放声音?

    这就是声音的 存储 方式
  • #文档是什么意思?

    这是我的 HTML 文件 我正在尝试使用Selenium Webdriver API随着Chrome驱动程序 to send keys to an input归档内 但我无法访问其中的任何内容 document 我不明白为什么 有人可以告诉
  • 如何在图像上叠加徽标?使用CSS

    正如您所看到的 徽标显示在背景图像上方 但我希望它位于背景图像的中心 这是我的标题 背景需要从页面顶部开始并在菜单之前结束 徽标需要显示在背景图像的中央 我已经尝试了很多 但也许有人遇到了类似的问题 可以帮助我解决这个问题 这张图片显示它几
  • CSS:响应式布局中的高度自动问题

    我在响应式布局中使用 jquery 延迟加载 并使用空白 gif 作为预览图像 为了使延迟加载工作 我必须通过属性设置图像的高度和宽度 预览图像未设置为正确的高度 因为 height auto 似乎是通过 src 而不是通过高度属性计算高度
  • 一个输入字段,多个名称

    在 HTML 表单中 如何从一个输入字段获取两个姓名 是否可以通过隐藏的输入字段 如何 我试图使隐藏字段值动态等于非隐藏字段值 这样无论用户写什么 它们都相等 但我确信它不起作用 而不是像这样的东西是否会起作用工作 Here http ww
  • 如何让更大的布局适合小设备屏幕?

    我有一个小问题meta viewport元素 问题是我的布局min width比我想要使用的许多屏幕分辨率都要大 所以将其设置为 没有帮助 结果我得到的页面必须缩小以适应设备宽度 如果我什至添加像 它也不起作用 发现了一个黑客来自CSS 技
  • 有什么方法可以安全地在浏览器中显示视频

    有什么方法可以安全地在浏览器中显示视频 就像他的安全措施之一 视频无法下载 谢谢 我想您的意思是您不希望您的视频被下载或复制 如果是这样 那么阻止人们下载视频或多或少是不可能的 甚至有很多工具可以从 YouTube 等大型提供商那里下载 因
  • 使用 data() 的 R 包命名空间问题 -- 找不到数据集

    我在尝试在我自己的包中导入包 即 robfilter 时遇到了问题 我尝试使用它的方法之一 adore filter 在这一行失败 data critvals 出现错误 未找到数据集 critvals 如果我通过 require robfi
  • R中不重复的组合

    我试图获取变量元素长度为 3 的所有可能组合 虽然它部分地与combn 一起工作 但我没有完全得到我正在寻找的输出 这是我的例子 x lt c a b c d e t combn c x x 3 我得到的输出看起来像这样 1 2 3 1 a
  • 有条件地将字符串转换为特定数值

    我确信对此有一个简单的答案 但我已经扫描了堆栈溢出 但无法找到解决方案 似乎 sapply 和 ifelse 函数的组合可能可以完成这项工作 但我不确定 所以我有一个包含字符的数据框 除了一列是数值 Create dataframe whi
  • R中的引用调用(使用函数修改对象)

    我刚刚接触 R 很惊讶地发现函数不会修改对象 至少看起来这是默认的 例如 我编写了一个函数 只是为了在表格中的一个标签上粘贴一个星号 它在函数内部工作 但表本身没有改变 我主要来自Ruby 那么 在 R 中使用函数更改对象的正常 可接受的方

随机推荐

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

    我有一个 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 相反 需要几秒钟才能从数百万行数据生成表输出 但表表示远非简