6

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

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

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

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

产生这个:

具有按物种分组的行的鸢尾花表

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

有没有办法折叠行formattable

4

1 回答 1

5

collapse_rows编辑 kable 对象。如果您查看代码,它会根据所选的输出格式(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

于 2018-07-22T14:11:06.500 回答