DT::datatable Rmarkdown 报告中的分组数据框 (HTML)

DT::datatable on grouped dataframe within Rmarkdown report (HTML)

我有一个分组数据框输出,我想在 Rmarkdown 报告 (HTML) 中将其可视化为带有下载按钮 (csv,excel) 的 DT::datatable。

当我构建 Rmarkdown 时它工作正常,但显示错误提示没有适用于对象 类 数据表和 htmlwidgets 的分组方法。

非常感谢。

这是我的代码:

## Grouping columns

Site <- LETTERS[1:6]
Block <- LETTERS[1:4] ## For each Site
Plot <- paste(rep("P",10),seq(1,10,1),sep="_") ## For each Block 
df <- expand.grid(Site = Site, Block = Block, Plot = Plot)

## Dependant variables

df <-cbind.data.frame(df,data.frame(Tmin=runif(min=-3,max=18,n=240),
                         Tmax=runif(min=10,max=39, n=240),
                                    Index1=runif(0,5,n=240),
                                    Index2=runif(1,10,n=240)))

# Export grouped df as datatable
library(dplyr)


df%>%
  group_by(Site,Block,Plot)%>%
  summarize(Tmin_avg=mean(Tmin), Tmax_avg=mean(Tmax))%>%
  DT::datatable(
   extensions = 'Buttons', options = list(
    dom = 'Bfrtip',
    buttons = 
      list('copy', 'print', list(
        extend = 'collection',
        buttons = c('csv', 'excel', 'pdf'),
        text = 'Download'
      ))
   ))

您忘记汇总数据,您应该从汇总函数中删除 ...... 用于函数内部,使用户可以灵活地将现有参数添加到函数中。例如

library(tidyverse) 

aggfun <- function(df, ...) {
  df%>%
    group_by(Site,Block,Plot)%>%
    summarize(Tmin_avg=mean(Tmin), Tmax_avg=mean(Tmax), ...)%>%
    DT::datatable(
      extensions = 'Buttons', options = list(
        dom = 'Bfrtip',
        buttons = 
          list('copy', 'print', list(
            extend = 'collection',
            buttons = c('csv', 'excel', 'pdf'),
            text = 'Download'
          ))
      ))
}

aggfun(df, T_min = min(Tmin))

如果您进行以下更改,您的示例将有效:

df%>%
  group_by(Site,Block,Plot)%>%
  summarize(Tmin_avg=mean(Tmin), Tmax_avg=mean(Tmax))%>%
  DT::datatable(
   extensions = 'Buttons', options = list(
    dom = 'Bfrtip',
    buttons = 
      list('copy', 'print', list(
        extend = 'collection',
        buttons = c('csv', 'excel', 'pdf'),
        text = 'Download'
      ))
   ))