我正在构建一个Shiny应用程序,用于处理用户选择的多个文本文件。 输出是一个包含数百万行和数十列的庞大数据帧。 我现在感兴趣的是允许用户以交互方式过滤行,选择列和汇总列(通过从函数列表中选择,例如mean,sd,max,min,sum等...)。结果将是一个较小的数据框,总结了每个用户选择的数据 - 基本上我需要创建一个实现dplyr库基本功能的GUI。
一般来说,我知道如何通过手动创建一堆GUI元素并将它们输入到具有许多dplyr命令的服务器函数中来实现。由于这似乎是一个非常标准的功能(GUI过滤和总结数据帧),在我从头开始构建它之前,我想知道是否有任何东西"现成的#34;我可以使用现状或作为我的起点。
答案 0 :(得分:2)
我知道你说rpivotTable
并不是你所追求的,但我认为它可以被配置为做一些繁重的工作,
这是一个示例(使用rpivotTable
进行操作,DT
显示data.frame,rvest
来解析来自DOM的innerHTML,可能有更好的数据格式从客户端传递表对象,但这是概念证明):
ui.R
library(shiny)
library(DT)
library(rpivotTable)
FullPage <- fluidPage(
DT::dataTableOutput('aSummaryTable'),
rpivotTableOutput('RESULTS')
)
FullPage
server.R:
library(shiny)
library(rpivotTable)
library(DT)
library(rvest)
function(input, output, session) {
# Make some sample data
qbdata <- reactive({
expand.grid(LETTERS,1:3)
})
# Clean the html and store as reactive
summarydf <- eventReactive(input$myData,{
input$myData %>%
read_html %>%
html_table(fill = TRUE) %>%
# Turns out there are two tables in an rpivotTable, we want the second
.[[2]]
})
# show df as DT::datatable
output$aSummaryTable <- DT::renderDataTable({
datatable(summarydf(), rownames = FALSE)
})
# Whenever the config is refreshed, call back with the content of the table
output$RESULTS <- renderRpivotTable({
rpivotTable(
qbdata(),
onRefresh =
htmlwidgets::JS("function(config) {
Shiny.onInputChange('myData', document.getElementById('RESULTS').innerHTML);
}")
)
})
}