R中的日历热图

R中的日历热图,r,dplyr,data-visualization,gt,reactable,R,Dplyr,Data Visualization,Gt,Reactable,希望在R中创建一个gt/reactable表,用作日历热图。就像在这个网站上找到的一样。当我尝试复制该代码时,我得到一个错误:“仅在具有所有数字相似变量的数据帧上定义。”我将年份设置为因子变量,不想给该列着色。以下是我尝试的代码+dput输出: BuYlRd <- function(x) rgb(colorRamp(c("#7fb7d7", "#ffffbf", "#fc8d59")) (x), maxColorValue =

希望在R中创建一个gt/reactable表,用作日历热图。就像在这个网站上找到的一样。当我尝试复制该代码时,我得到一个错误:“仅在具有所有数字相似变量的数据帧上定义。”我将年份设置为因子变量,不想给该列着色。以下是我尝试的代码+dput输出:

BuYlRd <- function(x) rgb(colorRamp(c("#7fb7d7", "#ffffbf", "#fc8d59")) 
(x), maxColorValue = 255)

reactable(
  bls,
  defaultColDef = colDef(
    style = function(value) {
      if (!is.numeric(value)) return()
      normalized <- (value - min(bls)) / (max(bls) - min(bls))
      color <- BuYlRd(normalized)
      list(background = color)
    },
    format = colFormat(digits = 2),
    minWidth = 50
  ),
  columns = list(
    .rownames = colDef(name = "Year", sortable = TRUE, align = 
"left")
  ),
  bordered = TRUE
)

解决方案可能是将年份列放入数据集的行名称中,然后删除年份列:

bls=as.data.frame(bls)
rownames(bls)=bls$year
bls=bls[,-1]
reactable(
  bls,
  defaultColDef = colDef(
    style = function(value) {
      if (!is.numeric(value)) return()
      normalized <- (value - min(bls)) / (max(bls) - min(bls))
      color <- BuYlRd(normalized)
      list(background = color)
    },
    format = colFormat(digits = 2),
    minWidth = 50
  ),
  columns = list(
    .rownames = colDef(name = "Year", sortable = TRUE, align = 
"left")
  ),
  bordered = TRUE
)
bls=as.data.frame(bls)
行名称(bls)=bls$年
bls=bls[,-1]
反应的(
bls,
defaultColDef=colDef(
样式=功能(值){
如果(!is.numeric(value))返回()

正常化谢谢。如果我的数据中有NA怎么办?例如,如果我想添加2021年6月至12月的数据,那么还没有数据。如果我将它们替换为0,那么整个色阶都会消失
bls=as.data.frame(bls)
rownames(bls)=bls$year
bls=bls[,-1]
reactable(
  bls,
  defaultColDef = colDef(
    style = function(value) {
      if (!is.numeric(value)) return()
      normalized <- (value - min(bls)) / (max(bls) - min(bls))
      color <- BuYlRd(normalized)
      list(background = color)
    },
    format = colFormat(digits = 2),
    minWidth = 50
  ),
  columns = list(
    .rownames = colDef(name = "Year", sortable = TRUE, align = 
"left")
  ),
  bordered = TRUE
)