【问题标题】:Change label of cell values but keep their colouring更改单元格值的标签但保留其颜色
【发布时间】:2019-03-11 07:26:42
【问题描述】:

我正在使用DT 包为由数字单元格值组成的频率表着色(df_numbered,见下文)。

library(DT)
df_numbered <- data.frame(cat1 = 1:3,
                          cat2 = 4:6,
                          cat3 = 7:9)

但是,我想将显示的数值替换为字符标签(例如,df_labeled 中的类别名称)。

df_labeled <- data.frame(cat1 = letters[1:3],
                         cat2 = letters[4:6], 
                         cat3 = letters[7:9])

按照以下说明为表格着色:https://rstudio.github.io/DT/010-style.html

brks <- quantile(df_numbered, probs = seq(.05, .95, .05), na.rm = TRUE)
clrs <- round(seq(255, 40, length.out = length(brks) + 1), 0) %>%
{paste0("rgb(255,", ., ",", ., ")")}
datatable(df_numbered) %>% 
          formatStyle(names(df_numbered), 
          backgroundColor = styleInterval(brks, clrs))

这适用于df_numbered。现在我想用来自df_labeled 的相应标签重新标记显示的单元格值。

我尝试保存数据表对象并替换数据,但在此过程中我失去了着色。

dt <- datatable(df_numbered) %>%
                formatStyle(names(df_numbered), 
                backgroundColor = styleInterval(brks, clrs))
dt$x$data <- df_labeled 

我的问题是,如何保持着色但更改显示的单元格值?

【问题讨论】:

    标签: r datatable dt


    【解决方案1】:

    您可以从绑定两个数据框开始:

    df_numbered <- data.frame(c1 = 1:3,
                              c2 = 4:6,
                              c3 = 7:9)
    df_labeled <- data.frame(cat1 = letters[1:3],
                             cat2 = letters[4:6], 
                             cat3 = letters[7:9])
    df <- cbind(df_labeled, df_numbered)
    

    那么你可以这样格式化:

    formatStyle(names(df_labeled), valueColumns = names(df_numbered),  
                backgroundColor = styleInterval(brks, clrs))
    

    但是您不想要 df_numbered 列,所以隐藏它们:

    datatable(df, 
              options = list(
                columnDefs = list(
                  list(visible = FALSE, targets = 4:6)
                )
              )) %>% 
      formatStyle(names(df_labeled), valueColumns = names(df_numbered),  
                  backgroundColor = styleInterval(brks, clrs))
    

    【讨论】:

    • 正是我想要的,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2020-11-06
    • 2014-08-24
    • 2018-12-25
    • 1970-01-01
    • 1970-01-01
    • 2020-09-25
    • 2023-03-14
    • 2018-08-20
    相关资源
    最近更新 更多