Fonte: https://gomesfellipe.github.io/post/2018-01-12-tabelas-incriveis-com-r/tabelas-incriveis-com-r/
PACOTE DT
# install.packages("DT") #caso ainda nao tenha o pacote instalado
library("DT")
DT::datatable(iris[1:20, c(5, 1:4)], rownames = FALSE)
PACOTE FORMATTABLE
# Instalando pelo github
# library(devtools)
# devtools::install_github("renkun-ken/formattable")
#suppressMessages(library(formattable))
#Exemplo de formatação para resultados de porcentagem:
percent(c(0.1, 0.02, 0.03, 0.12))
[1] 10.00% 2.00% 3.00% 12.00%
## [1] 10.00% 2.00% 3.00% 12.00%
#Exemplo de formatação para resultados de na casa do milhar:
accounting(c(1000, 500, 200, -150, 0, 1200))
[1] 1,000.00 500.00 200.00 (150.00) 0.00 1,200.00
## [1] 1,000.00 500.00 200.00 (150.00) 0.00 1,200.00
#criando um data.frame
df <- data.frame(
id = 1:10,
Nomes = c("Sofia", "Kiara", "Dunki", "Edgar", "Aline","Gertrudes", "Genovena", "Champanhe", "Pérola", "Penelope"),
Kilos = accounting(c(20000, 30000, 50000, 70000, 47000,80000,45000,35000,20000,25000), format = "d"),
Crescimento = percent(c(0.1, 0.2, 0.5, 0.95, 0.97,0.45,0.62,0.57,0.37, 0.3), format = "d"),
Suficiente = formattable(c(T, F, T, F, T,F,F,T,T,F), "Sim", "Não"))
formattable(df, list(
id = color_tile("white", "orange"),
Suficiente = formatter("span", style = x ~ ifelse(x == T,
style(color = "green", font.weight = "bold"), NA)),
area(col = c(Kilos)) ~ normalize_bar("lightgrey", 0.2),
Crescimento = formatter("span",
style = x ~ style(color = ifelse(rank(-x) <= 3, "green", "gray")),
x ~ sprintf("%.2f (rank: %02g)", x, rank(-x)))
))
O PACOTE SPARKLIKE
# library(devtools)
# install_github('htmlwidgets/sparkline')
#Carregando o pacote:
library(htmlwidgets)
library(sparkline)
#Exemplos de uso:
x = rnorm(20)
sparkline(x)
sparkline(x, type = 'bar')
sparkline(x, type = 'box')
O PACOTE RHANDSONTABLE
#Carregando o pacote:
suppressMessages(library(rhandsontable))
#Tabela para correlações
rhandsontable(cor(iris[,-5]), readOnly = TRUE, width = 750, height = 300) %>%
hot_cols(renderer = "
function (instance, td, row, col, prop, value, cellProperties) {
Handsontable.renderers.TextRenderer.apply(this, arguments);
if (row == col) {
td.style.background = 'lightgrey';
} else if (col > row) {
td.style.background = 'grey';
td.style.color = 'grey';
} else if (value < -0.75) {
td.style.background = 'pink';
} else if (value > 0.75) {
td.style.background = 'lightgreen';
}
}")
#Tabela com mini gráficos
#criando um data.frame
df <- data.frame(
id = 1:10,
Nomes = c("Sofia", "Kiara", "Dunki", "Edgar", "Aline","Gertrudes", "Genovena", "Champanhe", "Pérola", "Penelope"),
Kilos = accounting(c(20000, 30000, 50000, 70000, 47000,80000,45000,35000,20000,25000), format = "d"),
Crescimento = percent(c(0.1, 0.2, 0.5, 0.95, 0.97,0.45,0.62,0.57,0.37, 0.3), format = "d"),
Suficiente = c(T, F, T, F, T,F,F,T,T,F))
#E os gráficos de barra:
df$chart = c(sapply(1:5,
function(x) jsonlite::toJSON(list(values=rnorm(10,10,10),
options = list(type = "bar")))),
sapply(1:5,
function(x) jsonlite::toJSON(list(values=rnorm(10,10,10),
options = list(type = "line")))))
rhandsontable(df, rowHeaders = NULL, width = 550, height = 300) %>%
hot_col("chart", renderer = htmlwidgets::JS("renderSparkline"))
LS0tDQp0aXRsZTogIlIgVGFiZWxhcyINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCkZvbnRlOiBodHRwczovL2dvbWVzZmVsbGlwZS5naXRodWIuaW8vcG9zdC8yMDE4LTAxLTEyLXRhYmVsYXMtaW5jcml2ZWlzLWNvbS1yL3RhYmVsYXMtaW5jcml2ZWlzLWNvbS1yLw0KDQojIFBBQ09URSBEVA0KDQpgYGB7cn0NCiMgaW5zdGFsbC5wYWNrYWdlcygiRFQiKSAgI2Nhc28gYWluZGEgbmFvIHRlbmhhIG8gcGFjb3RlIGluc3RhbGFkbw0KbGlicmFyeSgiRFQiKQ0KRFQ6OmRhdGF0YWJsZShpcmlzWzE6MjAsIGMoNSwgMTo0KV0sIHJvd25hbWVzID0gRkFMU0UpDQpgYGANCg0KIyBQQUNPVEUgRk9STUFUVEFCTEUNCg0KYGBge3J9DQojIEluc3RhbGFuZG8gcGVsbyBnaXRodWINCiMgbGlicmFyeShkZXZ0b29scykNCiMgZGV2dG9vbHM6Omluc3RhbGxfZ2l0aHViKCJyZW5rdW4ta2VuL2Zvcm1hdHRhYmxlIikNCg0KI3N1cHByZXNzTWVzc2FnZXMobGlicmFyeShmb3JtYXR0YWJsZSkpDQoNCiNFeGVtcGxvIGRlIGZvcm1hdGHDp8OjbyBwYXJhIHJlc3VsdGFkb3MgZGUgcG9yY2VudGFnZW06DQpwZXJjZW50KGMoMC4xLCAwLjAyLCAwLjAzLCAwLjEyKSkNCiMjIFsxXSAxMC4wMCUgMi4wMCUgIDMuMDAlICAxMi4wMCUNCiNFeGVtcGxvIGRlIGZvcm1hdGHDp8OjbyBwYXJhIHJlc3VsdGFkb3MgZGUgbmEgY2FzYSBkbyBtaWxoYXI6DQphY2NvdW50aW5nKGMoMTAwMCwgNTAwLCAyMDAsIC0xNTAsIDAsIDEyMDApKQ0KIyMgWzFdIDEsMDAwLjAwIDUwMC4wMCAgIDIwMC4wMCAgICgxNTAuMDApIDAuMDAgICAgIDEsMjAwLjAwDQoNCiNjcmlhbmRvIHVtIGRhdGEuZnJhbWUNCmRmIDwtIGRhdGEuZnJhbWUoDQogIGlkID0gMToxMCwgDQogIE5vbWVzID0gYygiU29maWEiLCAiS2lhcmEiLCAiRHVua2kiLCAiRWRnYXIiLCAiQWxpbmUiLCJHZXJ0cnVkZXMiLCAiR2Vub3ZlbmEiLCAiQ2hhbXBhbmhlIiwgIlDDqXJvbGEiLCAiUGVuZWxvcGUiKSwNCiAgS2lsb3MgPSBhY2NvdW50aW5nKGMoMjAwMDAsIDMwMDAwLCA1MDAwMCwgNzAwMDAsIDQ3MDAwLDgwMDAwLDQ1MDAwLDM1MDAwLDIwMDAwLDI1MDAwKSwgZm9ybWF0ID0gImQiKSwNCiAgQ3Jlc2NpbWVudG8gPSBwZXJjZW50KGMoMC4xLCAwLjIsIDAuNSwgMC45NSwgMC45NywwLjQ1LDAuNjIsMC41NywwLjM3LCAwLjMpLCBmb3JtYXQgPSAiZCIpLA0KICBTdWZpY2llbnRlID0gZm9ybWF0dGFibGUoYyhULCBGLCBULCBGLCBULEYsRixULFQsRiksICJTaW0iLCAiTsOjbyIpKQ0KDQpmb3JtYXR0YWJsZShkZiwgbGlzdCgNCiAgaWQgPSBjb2xvcl90aWxlKCJ3aGl0ZSIsICJvcmFuZ2UiKSwNCiAgU3VmaWNpZW50ZSA9IGZvcm1hdHRlcigic3BhbiIsIHN0eWxlID0geCB+IGlmZWxzZSh4ID09IFQsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZShjb2xvciA9ICJncmVlbiIsIGZvbnQud2VpZ2h0ID0gImJvbGQiKSwgTkEpKSwNCiAgYXJlYShjb2wgPSBjKEtpbG9zKSkgfiBub3JtYWxpemVfYmFyKCJsaWdodGdyZXkiLCAwLjIpLA0KICBDcmVzY2ltZW50byA9IGZvcm1hdHRlcigic3BhbiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlID0geCB+IHN0eWxlKGNvbG9yID0gaWZlbHNlKHJhbmsoLXgpIDw9IDMsICJncmVlbiIsICJncmF5IikpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICB4IH4gc3ByaW50ZigiJS4yZiAocmFuazogJTAyZykiLCB4LCByYW5rKC14KSkpDQopKQ0KYGBgDQoNCiMgTyBQQUNPVEUgS05JVFIgRSBLQUJCTEVFWFRSQQ0KDQpgYGB7cn0NCiNDYXJyZWdhbmRvIHBhY290ZXMNCnN1cHByZXNzTWVzc2FnZXMobGlicmFyeShrbml0cikpDQpzdXBwcmVzc01lc3NhZ2VzKGxpYnJhcnkoa2FibGVFeHRyYSkpDQojQ2FycmVnYW5kbyBwYWNvdGUgcGFyYSBhanVkYXIgbmEgbWFuaXB1bGHDp8OjbyBkb3MgZGFkb3M6DQpzdXBwcmVzc01lc3NhZ2VzKGxpYnJhcnkoZHBseXIpKQ0KDQptdGNhcnNbMToxMCwgMToyXSAlPiUNCiAgbXV0YXRlKA0KICAgIGNhciA9IHJvdy5uYW1lcyguKSwNCiAgICAjIFZvY8OqIG7Do28gcHJlY2lzYSBkZSBmb3JtYXRvID0gImh0bWwiIHNlIHZvY8OqIGrDoSBkZWZpbml1IG9ww6fDtWVzIChrbml0ci50YWJsZS5mb3JtYXQpDQogICAgbXBnID0gY2VsbF9zcGVjKG1wZywgImh0bWwiLCBjb2xvciA9IGlmZWxzZShtcGcgPiAyMCwgInJlZCIsICJibHVlIikpLA0KICAgIGN5bCA9IGNlbGxfc3BlYyhjeWwsICJodG1sIiwgY29sb3IgPSAid2hpdGUiLCBhbGlnbiA9ICJjIiwgYW5nbGUgPSA0NSwgDQogICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQgPSBmYWN0b3IoY3lsLCBjKDQsIDYsIDgpLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjKCIjNjY2NjY2IiwgIiM5OTk5OTkiLCAiI0JCQkJCQiIpKSkpICU+JQ0KICBzZWxlY3QoY2FyLCBtcGcsIGN5bCkgJT4lDQogIGthYmxlKCJodG1sIiwgZXNjYXBlID0gRikgJT4lDQogIGthYmxlX3N0eWxpbmcoInN0cmlwZWQiLCBmdWxsX3dpZHRoID0gRikNCg0KI091dHJvIGV4ZW1wbG8gY29sb3JpZG8gbGVnYWw6DQppcmlzWzE6MTAsIF0gJT4lDQogIG11dGF0ZV9pZihpcy5udW1lcmljLCBmdW5jdGlvbih4KSB7DQogICAgY2VsbF9zcGVjKHgsICJodG1sIiwgYm9sZCA9IFQsIGNvbG9yID0gc3BlY19jb2xvcih4LCBlbmQgPSAwLjkpLA0KICAgICAgICAgICAgICBmb250X3NpemUgPSBzcGVjX2ZvbnRfc2l6ZSh4KSkNCiAgfSkgJT4lDQogIG11dGF0ZShTcGVjaWVzID0gY2VsbF9zcGVjKA0KICAgIFNwZWNpZXMsICJodG1sIiwgY29sb3IgPSAid2hpdGUiLCBib2xkID0gVCwNCiAgICBiYWNrZ3JvdW5kID0gc3BlY19jb2xvcigxOjEwLCBlbmQgPSAwLjksIG9wdGlvbiA9ICJBIiwgZGlyZWN0aW9uID0gLTEpDQogICkpICU+JQ0KICBrYWJsZSgiaHRtbCIsIGVzY2FwZSA9IEYsIGFsaWduID0gImMiKSAlPiUNCiAga2FibGVfc3R5bGluZygic3RyaXBlZCIsIGZ1bGxfd2lkdGggPSBGKQ0KDQpgYGANCg0KDQpgYGB7cn0NCiNJbnRlZ3JhbmRvIGNvbSBmb3JtYXR0YWJsZQ0Kc3VwcHJlc3NNZXNzYWdlcyhsaWJyYXJ5KGZvcm1hdHRhYmxlKSkNCm10Y2Fyc1sxOjUsIDE6NF0gJT4lDQogIG11dGF0ZSgNCiAgICBjYXIgPSByb3cubmFtZXMoLiksDQogICAgbXBnID0gY29sb3JfdGlsZSgid2hpdGUiLCAib3JhbmdlIikobXBnKSwNCiAgICBjeWwgPSBjZWxsX3NwZWMoY3lsLCAiaHRtbCIsIGFuZ2xlID0gKDE6NSkqNjAsIA0KICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kID0gInJlZCIsIGNvbG9yID0gIndoaXRlIiwgYWxpZ24gPSAiY2VudGVyIiksDQogICAgZGlzcCA9IGlmZWxzZShkaXNwID4gMjAwLA0KICAgICAgICAgICAgICAgICAgY2VsbF9zcGVjKGRpc3AsICJodG1sIiwgY29sb3IgPSAicmVkIiwgYm9sZCA9IFQpLA0KICAgICAgICAgICAgICAgICAgY2VsbF9zcGVjKGRpc3AsICJodG1sIiwgY29sb3IgPSAiZ3JlZW4iLCBpdGFsaWMgPSBUKSksDQogICAgaHAgPSBjb2xvcl9iYXIoImxpZ2h0Z3JlZW4iKShocCkNCiAgKSAlPiUNCiAgc2VsZWN0KGNhciwgZXZlcnl0aGluZygpKSAlPiUNCiAga2FibGUoImh0bWwiLCBlc2NhcGUgPSBGKSAlPiUNCiAga2FibGVfc3R5bGluZygiaG92ZXIiLCBmdWxsX3dpZHRoID0gRikgJT4lDQogIGNvbHVtbl9zcGVjKDUsIHdpZHRoID0gIjNjbSIpICU+JQ0KICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiLCAiSGVsbG8iID0gMiwgIldvcmxkIiA9IDIpKQ0KYGBgDQoNCiMgTyBQQUNPVEUgU1BBUktMSUtFDQoNCmBgYHtyfQ0KIyBsaWJyYXJ5KGRldnRvb2xzKQ0KIyBpbnN0YWxsX2dpdGh1YignaHRtbHdpZGdldHMvc3BhcmtsaW5lJykNCg0KI0NhcnJlZ2FuZG8gbyBwYWNvdGU6DQpsaWJyYXJ5KGh0bWx3aWRnZXRzKQ0KbGlicmFyeShzcGFya2xpbmUpDQoNCiNFeGVtcGxvcyBkZSB1c286DQp4ID0gcm5vcm0oMjApDQpzcGFya2xpbmUoeCkNCnNwYXJrbGluZSh4LCB0eXBlID0gJ2JhcicpDQpzcGFya2xpbmUoeCwgdHlwZSA9ICdib3gnKQ0KYGBgDQoNCmBgYHtyfQ0KI1NlamE6DQpzZXQuc2VlZCgxMjM0KQ0KeCA9IHJub3JtKDEwKQ0KeSA9IHJub3JtKDEwKQ0KDQojQW8gZGlnaXRhciBpc3NvOg0KDQp8IFZhci4gIHwgU3BhcmtsaW5lICAgICAgICAgfCBCb3hwbG90ICAgICAgICAgICAgICAgICAgICAgICB8IEJhciAgICAgICAgICAgICAgICAgICAgICAgICAgDQp8LS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQp8IHggICAgIHwgYHIgc3BhcmtsaW5lKHgpYCAgfCBgciBzcGFya2xpbmUoeCwgdHlwZSA9J2JveCcpYCB8YHIgc3BhcmtsaW5lKHgsIHR5cGUgPSAnYmFyJylgDQp8IHkgICAgIHwgYHIgc3BhcmtsaW5lKHkpYCAgfCBgciBzcGFya2xpbmUoeSwgdHlwZSA9J2JveCcpYCB8YHIgc3BhcmtsaW5lKHksIHR5cGUgPSAnYmFyJylgDQpgYGANCg0KIyBPIFBBQ09URSBSSEFORFNPTlRBQkxFDQpgYGB7cn0NCiNDYXJyZWdhbmRvIG8gcGFjb3RlOg0Kc3VwcHJlc3NNZXNzYWdlcyhsaWJyYXJ5KHJoYW5kc29udGFibGUpKQ0KDQojVGFiZWxhIHBhcmEgY29ycmVsYcOnw7Vlcw0KcmhhbmRzb250YWJsZShjb3IoaXJpc1ssLTVdKSwgcmVhZE9ubHkgPSBUUlVFLCB3aWR0aCA9IDc1MCwgaGVpZ2h0ID0gMzAwKSAlPiUNCiAgaG90X2NvbHMocmVuZGVyZXIgPSAiDQogICAgICAgICAgIGZ1bmN0aW9uIChpbnN0YW5jZSwgdGQsIHJvdywgY29sLCBwcm9wLCB2YWx1ZSwgY2VsbFByb3BlcnRpZXMpIHsNCiAgICAgICAgICAgSGFuZHNvbnRhYmxlLnJlbmRlcmVycy5UZXh0UmVuZGVyZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsNCiAgICAgICAgICAgaWYgKHJvdyA9PSBjb2wpIHsNCiAgICAgICAgICAgdGQuc3R5bGUuYmFja2dyb3VuZCA9ICdsaWdodGdyZXknOw0KICAgICAgICAgICB9IGVsc2UgaWYgKGNvbCA+IHJvdykgew0KICAgICAgICAgICB0ZC5zdHlsZS5iYWNrZ3JvdW5kID0gJ2dyZXknOw0KICAgICAgICAgICB0ZC5zdHlsZS5jb2xvciA9ICdncmV5JzsNCiAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA8IC0wLjc1KSB7DQogICAgICAgICAgIHRkLnN0eWxlLmJhY2tncm91bmQgPSAncGluayc7DQogICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPiAwLjc1KSB7DQogICAgICAgICAgIHRkLnN0eWxlLmJhY2tncm91bmQgPSAnbGlnaHRncmVlbic7DQogICAgICAgICAgIH0NCiAgICAgICAgICAgfSIpDQpgYGANCg0KYGBge3J9DQojVGFiZWxhIGNvbSBtaW5pIGdyw6FmaWNvcw0KI2NyaWFuZG8gdW0gZGF0YS5mcmFtZQ0KZGYgPC0gZGF0YS5mcmFtZSgNCiAgaWQgPSAxOjEwLCANCiAgTm9tZXMgPSBjKCJTb2ZpYSIsICJLaWFyYSIsICJEdW5raSIsICJFZGdhciIsICJBbGluZSIsIkdlcnRydWRlcyIsICJHZW5vdmVuYSIsICJDaGFtcGFuaGUiLCAiUMOpcm9sYSIsICJQZW5lbG9wZSIpLA0KICBLaWxvcyA9IGFjY291bnRpbmcoYygyMDAwMCwgMzAwMDAsIDUwMDAwLCA3MDAwMCwgNDcwMDAsODAwMDAsNDUwMDAsMzUwMDAsMjAwMDAsMjUwMDApLCBmb3JtYXQgPSAiZCIpLA0KICBDcmVzY2ltZW50byA9IHBlcmNlbnQoYygwLjEsIDAuMiwgMC41LCAwLjk1LCAwLjk3LDAuNDUsMC42MiwwLjU3LDAuMzcsIDAuMyksIGZvcm1hdCA9ICJkIiksDQogIFN1ZmljaWVudGUgPSBjKFQsIEYsIFQsIEYsIFQsRixGLFQsVCxGKSkNCg0KI0Ugb3MgZ3LDoWZpY29zIGRlIGJhcnJhOg0KZGYkY2hhcnQgPSBjKHNhcHBseSgxOjUsDQogICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHgpIGpzb25saXRlOjp0b0pTT04obGlzdCh2YWx1ZXM9cm5vcm0oMTAsMTAsMTApLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IGxpc3QodHlwZSA9ICJiYXIiKSkpKSwNCiAgICAgICAgICAgICBzYXBwbHkoMTo1LA0KICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbih4KSBqc29ubGl0ZTo6dG9KU09OKGxpc3QodmFsdWVzPXJub3JtKDEwLDEwLDEwKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBsaXN0KHR5cGUgPSAibGluZSIpKSkpKQ0KcmhhbmRzb250YWJsZShkZiwgcm93SGVhZGVycyA9IE5VTEwsIHdpZHRoID0gNTUwLCBoZWlnaHQgPSAzMDApICU+JQ0KICBob3RfY29sKCJjaGFydCIsIHJlbmRlcmVyID0gaHRtbHdpZGdldHM6OkpTKCJyZW5kZXJTcGFya2xpbmUiKSkNCmBgYA0KYGBge3J9DQojSW5jbHVpbmRvIGNvbWVudGFyaW9zOg0KY29tbWVudHMgPSBtYXRyaXgobmNvbCA9IG5jb2woZGYpLCBucm93ID0gbnJvdyhkZikpDQpjb21tZW50c1sxLCAxXSA9ICJFeGVtcGxvIGRlIGNvbWVudMOhcmlvIg0KY29tbWVudHNbMiwgMl0gPSAiT3V0cm8gZXhlbXBsbyBkZSBjb21lbnRhcmlvIg0KDQpyaGFuZHNvbnRhYmxlKGRmLCBjb21tZW50cyA9IGNvbW1lbnRzLCB3aWR0aCA9IDU1MCwgaGVpZ2h0ID0gMzAwKSU+JQ0KICBob3RfY29sKCJjaGFydCIsIHJlbmRlcmVyID0gaHRtbHdpZGdldHM6OkpTKCJyZW5kZXJTcGFya2xpbmUiKSkNCmBgYA0KDQpgYGB7cn0NClRhYmVsYSBjb20gYmFycmEgZGUgcm9sYXIgcGFyYSBncmFuZGUgYmFzZSBkZSBkYWRvcw0KcmhhbmRzb250YWJsZShtdGNhcnMsIHJvd0hlYWRlcldpZHRoID0gMjAwLCB3aWR0aCA9IDcwMCwgaGVpZ2h0ID0gNTUwKQ0KYGBgDQoNCg0KDQoNCg0KDQoNCg==