如何在 R 的 DT 库中创建自定义行聚合

问题描述 投票:0回答:1

目标

我想为按

rowGroup
库的
DT
扩展分组的表生成行聚合。我可以使用
rowGroup
对数据框进行分组,但不清楚如何在摘要行中填充聚合值。

我尝试过的事情

查阅DT文档中的示例,这里这里我相信答案在于使用

rowGroup.startRender
。但是,我不清楚如何在 R
DT
rowGroup
扩展中实现这一点。

所需输出

我想获取每组的样本数量以及每组的平均重量。

enter image description here

代码

DT::datatable(chickwts,
              rownames = TRUE,
              extensions="RowGroup",
              options = list(rowGroup = list(dataSrc=c(2),
                                             columnDefs = list(list(visible=FALSE, targets=c(2))))
              ))
r dt
1个回答
0
投票

调整引用链接中的示例,您可以通过将自定义 JS 渲染函数添加到

startRender
列表的
rowGroup
属性来实现所需的结果:

DT::datatable(chickwts,
  rownames = TRUE,
  extensions = "RowGroup",
  options = list(rowGroup = list(
    dataSrc = c(2),
    columnDefs = list(list(visible = FALSE, targets = c(2))),
    startRender = htmlwidgets::JS(
      "
      function (rows, group) {
      
            function addCell(tr, content, colSpan = 1) {
                let td = document.createElement('th');
             
                td.colSpan = colSpan;
                td.textContent = content;
             
                console.log(td);
      
                tr.appendChild(td);
            }

            let count = rows.count();
      
            let mean =
                rows
                  .data()
                  .pluck(1)
                  .reduce((a, b) => a + b) / rows.count();
      
            mean = DataTable.render
              .number(null, null, 0)
              .display(mean);
      
            let tr = document.createElement('tr');
            
            addCell(tr, group, 2);
            addCell(tr, 'n = ' + count + ', mean = ' + mean, 1);
            
            return tr;
        }
      ")
  ))
)

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.