1

我已经使用 RStudio 中的 reactable 包构建了一个表。第一列包含文本,所有其他列包含货币值。我添加了一个页脚,其中包含除第一列之外的每一列的总数。对于表格的主体,我在数字中添加了分隔符(因为它们是大数字)使用

colDef(格式 = colFormat(前缀 = “£”,分隔符 = TRUE,数字 = 2)

但这不适用于页脚,我不知道如何以相同格式获取页脚中的数字。页脚是使用

sprintf("£%.2f", sum(values))

所以有正确的前缀和小数位,但没有分隔符。有谁知道如何做到这一点?谢谢!

4

1 回答 1

0

在 reactable 中,您可以使用返回自定义内容的 R 或 JavaScript 函数自定义数据呈现。

使用R 渲染函数的可能解决方案formatC()
一个简单的可重现示例(仅供记录):

df <- data.frame(
  TextColumn = c("A", "B", "C", "D", "E"),
  NumColumn1 = c(1000111.01, 1000222.02, 1000333.03, 1000444.04, 1000555.05),
  NumColumn2 = c(2000111, 2000222, 2000333, 2000444, 2000555)
)

reactable::reactable(
  data = df,
  columns = list(
    NumColumn1 = reactable::colDef(
      format = reactable::colFormat(
        suffix = " €&quot;,
        separators = TRUE,
        digits = 2
      ),
      footer = function(values, name) {
        htmltools::div(paste0(formatC(
          x = sum(values),
          digits = 2,
          big.mark = " ",
          format = "f"
        ), " €&quot;))
      }
    ),
    NumColumn2 = reactable::colDef(
      format = reactable::colFormat(
        prefix = "£",
        separators = TRUE,
        digits = 2
      ),
      footer = function(values, name) {
        htmltools::div(paste0("£", formatC(
          x = sum(values),
          digits = 2,
          big.mark = " ",
          format = "f"
        )))
      }
    ),
    TextColumn = reactable::colDef(footer = "Total")
  )
)

输出:
在此处输入图像描述

您可能感兴趣的解决方案:

df <- data.frame(
  TextColumn = c("A", "B", "C", "D", "E"),
  NumColumn1 = c(1000111.01, 1000222.02, 1000333.03, 1000444.04, 1000555.05),
  NumColumn2 = c(2000111, 2000222, 2000333, 2000444, 2000555)
)

reactable::reactable(
  data = df,
  columns = list(
    NumColumn1 = reactable::colDef(
      format = reactable::colFormat(
        prefix = "£",
        separators = TRUE,
        digits = 2
      )),
    NumColumn2 = reactable::colDef(
      format = reactable::colFormat(
        prefix = "£",
        separators = TRUE,
        digits = 2
      )),
    TextColumn = reactable::colDef(
      footer = "Total"
    )
  ),
  defaultColDef = reactable::colDef(
    footer = function(values, name) {
      if (name %in% c("NumColumn1", "NumColumn2")) {
        htmltools::div(paste0("£", formatC(
          x = sum(values),
          digits = 2,
          big.mark = " ",
          format = "f"
        )))
      }
    },
    footerStyle = list(fontWeight = "bold")
    )
)

输出:
在此处输入图像描述

于 2021-12-06T22:22:50.037 回答