R-可反应-分组-在顶部显示总计

R-可反应-分组-在顶部显示总计,r,react-table,R,React Table,我对R中的可反应有一个问题。我有一个分组df,其中进行了som计算,例如相对数和和和。据我所知,可以使用内置函数max、mean等聚合分组的可反应的。相反,我希望显示名为show_top的行,而不是egcolDef(aggregate=“max”) 。不幸的是,我没有JS方面的经验 colDef( aggregate = JS(" function(values, rows) { // input: // - values: an array of all

我对
R
中的
可反应
有一个问题。我有一个分组df,其中进行了som计算,例如相对数和和和。据我所知,可以使用内置函数max、mean等聚合分组的
可反应的
。相反,我希望显示名为
show_top
的行,而不是eg
colDef(aggregate=“max”)

。不幸的是,我没有JS方面的经验

colDef(
  aggregate = JS("
    function(values, rows) {
      // input:
      //  - values: an array of all values in the group
      //  - rows: an array of row info objects for all rows in the group
      //
      // output:
      //  - an aggregated value, e.g. a comma-separated list
      return values.join(', ')
    }
  ")
)
请看下面我想要达到的目标

reactable(xy, groupBy = "col1")


虽然这可以通过自定义聚合函数实现,但我认为使用自定义聚合单元渲染器会更容易:

自定义单元渲染器可以访问更多信息,如列的名称(或ID)。自定义聚合函数更适合于对单个列中的值列表进行简单操作

可以使用JavaScript函数自定义所有列的聚合单元格。对于每个聚合单元格,查找
col2
值为
的子行“show\u top”
。然后,返回与当前列对应的行中的值

下面是一个例子:

library(reactable)

reactable(
  xy,
  groupBy = "col1",
  defaultColDef = colDef(
    aggregated = JS("
      function(cellInfo) {
        for (var i = 0; i < cellInfo.subRows.length; i++) {
          var row = cellInfo.subRows[i]
          if (row.col2 === 'show_top') {
            return row[cellInfo.column.id]
          }
        }
      }
    ")
  )
)
库(可反应)
反应的(
xy,
groupBy=“col1”,
defaultColDef=colDef(
聚合=JS(“
功能(cellInfo){
对于(var i=0;i


cellInfo.subRows
cellInfo.column
属性都记录在上面的链接中,如果有帮助的话。

感谢您的帮助!您知道是否可以从下拉菜单中删除“show_top”并仅显示顶部的值?您可以使用一些条件样式隐藏行(例如,使用
rowStyle
函数应用
display:none
),但不会删除该行。“组”列仍将显示
(4)
行。我认为将这些汇总行保留在数据框架之外,然后使用自定义聚合函数汇总组更有意义。可能还有其他方法可以做到这一点,而不必了解JavaScript,但这是一个不同的问题。
library(reactable)

reactable(
  xy,
  groupBy = "col1",
  defaultColDef = colDef(
    aggregated = JS("
      function(cellInfo) {
        for (var i = 0; i < cellInfo.subRows.length; i++) {
          var row = cellInfo.subRows[i]
          if (row.col2 === 'show_top') {
            return row[cellInfo.column.id]
          }
        }
      }
    ")
  )
)