【问题标题】:Dynamic percentage bars per row with formattable每行带有格式表的动态百分比条
【发布时间】:2018-10-05 12:52:09
【问题描述】:

我有一个 13 行 18 列的 data.frame。目标是按行创建percentage bar

根据 formattable 的文档,可能不支持直接开箱即用的百分比条。

MRE:

假人data.frame如下:

frame <- data.frame(replicate(18,sample(0:1,13,rep=TRUE)))

#load library
library(formattable)

下一行为第一行创建百分比条:

formattable(
            frame, list(area(1, 1:18) ~ color_bar("lightgray", function(col) col/sum(col))))

以下为所有行创建百分比条,但它是硬编码的:

formattable(
  frame, list(area(1, 1:ncol(frame)) ~ color_bar("lightgray", function(col) col/sum(col)),
                       area(2, 1:ncol(frame)) ~ color_bar("lightgray", function(col) col/sum(col)),
                       area(3, 1:ncol(frame)) ~ color_bar("lightgray", function(col) col/sum(col)),
                       area(4, 1:ncol(frame)) ~ color_bar("lightgray", function(col) col/sum(col)),
                       area(5, 1:ncol(frame)) ~ color_bar("lightgray", function(col) col/sum(col)),
                       area(6, 1:ncol(frame)) ~ color_bar("lightgray", function(col) col/sum(col)),
                       area(7, 1:ncol(frame)) ~ color_bar("lightgray", function(col) col/sum(col)),
                       area(8, 1:ncol(frame)) ~ color_bar("lightgray", function(col) col/sum(col)),
                       area(9, 1:ncol(frame)) ~ color_bar("lightgray", function(col) col/sum(col)),
                       area(10, 1:ncol(frame)) ~ color_bar("lightgray", function(col) col/sum(col)),
                       area(11, 1:ncol(frame)) ~ color_bar("lightgray", function(col) col/sum(col)),
                       area(12, 1:ncol(frame)) ~ color_bar("lightgray", function(col) col/sum(col)),
                       area(13, 1:ncol(frame)) ~ color_bar("lightgray", function(col) col/sum(col)))
) #works per row, not scalable

这个想法是动态地创建上面的图表(对于行的 n 个变量)

我尝试过但不起作用的事情包括:

formattable(
  frame, list(area(1:13, 1:ncol(frame)) ~ color_bar("lightgray", function(col) col/sum(col))))

这个不起作用,因为它会创建一个完整的区域,所以百分比是基于整个帧的。

【问题讨论】:

    标签: r formattable


    【解决方案1】:

    做到了:

    formattable(frame,
                lapply(as.list(1:nrow(frame)), function(row) {
                  area(row, 1:ncol(frame)) ~ color_bar('lightgray', function(row) row/sum(row))
                }))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-06
      • 2019-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多