2017-09-14 42 views
4

我有一些Microsoft Excel中的表,我需要在R Shiny应用程序中重新创建。 R中的格式必须至少保持与原始上下文大致相同。如何格式化R像Shiny DataTable像Microsoft Excel表

下面是原始表的图像:

表1

Excel Table 1

表2

Excel Table 2

通知的格式:有一表格标题下方的重新划线以及总计,标题和总计用粗体显示,月度帐单栏中的数字有数千个用逗号分隔并且有美元符号,并且表2中的最终数字被装箱。

如果行是不可重复使用,这样可以,但我需要至少能够加粗选定的主题,标题和总计,并且能够为月度帐单列获得正确的数字格式。

我试过使用DT包,但我无法弄清楚如何格式化行而不是列。我注意到DT为JavaScript函数使用包装器,但我自己并不知道JavaScript。有没有一种方法可以通过R包或Javascript来以我需要的方式进行格式化?

编辑:

尽管它会很简单,我不能仅仅因为包括一些数字会被链接到用户输入的表的图像,并且必须以更新的能力。

+0

对于静态表输出,请查看这些包之一:'pander','xtable'或'knitr :: kable'&'knitrExtra'。此外,这个答案可能让你开始:https://stackoverflow.com/questions/10587621/how-to-print-to-paper-a-nicely-formatted-data-frame – cmaher

回答

2

pixiedust可以很容易地做特定细胞的自定义。

T1 <- data.frame(Charge = c("Environmental", "Base Power Cost", 
          "Base Adjustment Cost", "Distribution Adder", 
          "Retail Rate Without Fuel", "Fuel Charge Adjustment", 
          "Retail Rate With Fuel"), 
       Summer = c(0.00303, 0.06018, 0.00492, 0.00501, 0.07314, 
          0.02252, 0.09566), 
       Winter = c(0.00303, 0.05707, 0.00468, 0.01264, 0.07742, 
          0.02252, 0.09994), 
       Transition = c(0.00303, 0.05585, 0.00459, 0.01264, 
           0.07611, 0.02252, 0.09863), 
       stringsAsFactors = FALSE) 

T2 <- data.frame(Period = c("Summer", "Winter", "Transition", "Yearly Bill"), 
       Rate = c(0.09566, 0.09994, 0.09863, NA), 
       Monthly = c(118.16, 122.44, 121.13, 1446.92), 
       stringsAsFactors = FALSE) 

library(shiny) 
library(pixiedust) 
library(dplyr) 
options(pixiedust_print_method = "html") 

shinyApp(
    ui = 
    fluidPage(
     uiOutput("table1"), 
     uiOutput("table2") 
    ), 

    server = 
    shinyServer(function(input, output, session){ 

     output$table1 <- 
     renderUI({ 
      dust(T1) %>% 
      sprinkle(rows = 1, 
        border = "bottom", 
        part = "head") %>% 
      sprinkle(rows = c(5, 7), 
        cols = 2:4, 
        border = "top") %>% 
      sprinkle(rows = c(5, 7), 
        bold = TRUE) %>% 
      sprinkle(pad = 4) %>% 
      sprinkle_colnames(Charge = "") %>% 
      print(asis = FALSE) %>% 
      HTML() 
     }) 

     output$table2 <- 
     renderUI({ 
      T2 %>% 
      mutate(Monthly = paste0("$", trimws(format(Monthly, big.mark = ",")))) %>% 
      dust() %>% 
      sprinkle(rows = 1, 
        border = "bottom", 
        part = "head") %>% 
      sprinkle(rows = 4, 
        cols = 1, 
        bold = TRUE) %>% 
      sprinkle(rows = 4, 
        cols = 3, 
        border = "all") %>% 
      sprinkle(na_string = "", 
        pad = 4) %>% 
      sprinkle_colnames(Period = "", 
           Monthly = "Monthly Bill") %>% 
      print(asis = FALSE) %>% 
      HTML() 

     }) 

    }) 
) 
1

如果您提供了一个数据示例,但坚持使用DT,您应该可以利用formatStyle来更改行和列的格式。举一个例子,以粗体显示的第一行,请参阅以下(假设你的数据帧被称为df):

df %>% 
    datatable() %>% 
    formatStyle(
    0, 
    target = "row", 
    fontWeight = styleEqual(1, "bold") 
) 

的rstudio DT页面提供了更多的例子:http://rstudio.github.io/DT/010-style.html

另外,我想你可能会更好关闭使用stargazer包。

基图与您想要的结果看起来非常相似。

stargazer::stargazer(df, type = "html", title = "Table 1") 

,将让你开始,但在这里看到更多的灵活性:https://www.jakeruss.com/cheatsheets/stargazer/