我有一个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))))
此方法不起作用,因为它会创建一个完整的区域,因此百分比基于完整的框架。
答案 0 :(得分:0)
做到了:
formattable(frame,
lapply(as.list(1:nrow(frame)), function(row) {
area(row, 1:ncol(frame)) ~ color_bar('lightgray', function(row) row/sum(row))
}))