微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

R中可反应的自定义JS聚合函数从分组数据中获得两个总和而不是一个总和

如何解决R中可反应的自定义JS聚合函数从分组数据中获得两个总和而不是一个总和

我正在使用 R 中的 reactable 包构建表格。行有 2 种渐变配色方案中的 1 种,具体取决于它们属于哪个组(在我的示例年份中)。这工作正常。但是,现在我想使用另一个变量向表中添加一个嵌套结构(它变得太大了)。想想国家内部的区域。但是,我无法清楚地总结国家层面的汇总结果。如果我使用 sum 我会得到总和,而我想保持一个地区和国家内年份的原始分解。因此,我不想聚合一个值,而是想聚合到两个值。理想情况下,我还想在组的标题中保留颜色渐变方案(Y1 为蓝色,Y2 为红色)。如何在自定义 JS() 函数中编写它?还是有其他方法可以做到这一点?

library(reactable)
library(tidyverse)

my_df <- data.frame(region = rep(1:4,each =2),country = rep(c("country_1","country_2"),each = 4),year= rep(c("Y1","Y2"),2),var1 = c(3,1,3,4,2,4),var2 = c(2,5,var3 = c(1,5))

make_color_pal <- function(colors,bias = 1) {
  get_color <- colorRamp(colors,bias = bias)
  function(x) rgb(get_color(x),maxColorValue = 255)
}


f_pct_color_1 <- make_color_pal(c("#ffffff","#E01F54"),bias = 1)
f_pct_color_2 <- make_color_pal(c("#ffffff","#001852"),bias = 1)



reactable(
  my_df,groupBy = "country",defaultColDef =  colDef(
    aggregate = "sum",class = "cell",style = function(value,index,name) {
      if (my_df[index,"year"] == 'Y1') {
        list(background = f_pct_color_1(
          value / my_df %>%
            filter(year   == "Y1") %>%
            ungroup() %>%
            select(-region,-country,-year ) %>%
            max()
        ))
      } else{
        list(background = f_pct_color_2(
          value / my_df %>%
            filter(year   == "Y2") %>%
            ungroup() %>%
            select(-region,-year ) %>%
            max()
        ))
      }
    }
  ),columns = list(
    region     = colDef(style = list(),aggregate = "count"),country    = colDef(style = list(),year    = colDef(style = list(),aggregate = "count")
  )
)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。