【问题标题】:How to collapse groups of row values within a table using formattable?如何使用 formattable 折叠表中的行值组?
【发布时间】:2018-07-20 21:08:58
【问题描述】:

我有兴趣使用formattable R 包中的工具,但我只想在表格中显示有变化的地方。也就是说,我想要通过 collapse_rows() 函数在 kableExtra 包中提供的分层行标签。

例如,使用kable()kableExtra,我可以这样做:

library(dplyr)
library(knitr)
library(kableExtra) 

iris %>% 
  group_by(Species) %>% 
  slice(1:2) %>% 
  select(Species, everything()) %>% 
  kable() %>% 
  collapse_rows(1, valign="top")

制作这个:

但是,我想使用 formattable 包和函数来执行此操作,以便在输出期间可以在特定列上运行任意函数。具体来说,我想将“迷你图”添加为新列。我可以使用knitrformattble 做到这一点,但据我所知,我失去了collapse_rows

有没有办法折叠formattable 中的行?

【问题讨论】:

    标签: r r-markdown formattable


    【解决方案1】:

    collapse_rows 编辑 kable 对象。如果您有look at the code,它会根据所选的输出格式(HTML/PDF/文本)进行很多不同的检查。

    如果您正在寻找一种更通用的折叠行的方法,我们必须在绘制表格之前编辑 data.frame。我编写了一个函数collapse_rows_df,它将折叠您数据框中的指定列。

    #' Collapse the values within a grouped dataframe
    #' 
    #' 
    collapse_rows_df <- function(df, variable){
    
      group_var <- enquo(variable)
    
      df %>%
        group_by(!! group_var) %>%
        mutate(groupRow = 1:n()) %>%
        ungroup() %>%
        mutate(!!quo_name(group_var) := ifelse(groupRow == 1, as.character(!! group_var), "")) %>%
        select(-c(groupRow))
    }
    

    使用这个函数,输出到格式化表:

    iris %>% 
      group_by(Species) %>% 
      slice(1:2) %>% 
      select(Species, everything()) %>%
      collapse_rows_df(Species) %>%
      formattable()
    

    如果您对在函数中使用 enquo()quo_name() 感到困惑,您应该查看 dplyr 如何使用非标准评估:https://dplyr.tidyverse.org/articles/programming.html

    【讨论】:

    • 你应该验证这个答案,这里的代码很好!
    猜你喜欢
    • 2013-08-31
    • 2018-12-24
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 2018-10-01
    • 2021-03-17
    • 2022-01-19
    • 1970-01-01
    相关资源
    最近更新 更多