我知道你說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);
}")
)
})
}
rpivotTable非常接近你想要的。除出口外。如果他們想要導出,則可能需要深入回調以獲取表格的當前狀態。 – Shape
我編輯了我的問題。我並不需要圖形和導出功能才能成爲解決方案的一部分。我可以根據自己的具體要求輕鬆實施它們。在這方面rpivotTable不是我所需要的,因爲它試圖做圖形,但不是很優雅的方式,我沒有看到任何自定義選項。此外,它不返回彙總數據幀,因此我無法對結果進行任何進一步處理(例如導出數據或創建自己的圖形)。 – Sasha
實際上有相當數量的自定義選項,儘管您需要檢查文檔的pivottable.js(與使用其他JS庫端口到R一樣,比如DT,文檔主要留給JS庫使用更新,html小部件只是一個包裝)。我發現一種方法可以將你的輸出作爲閃亮的對象返回,你只需要在rpivotTable上使用onRefresh參數,然後通過DOM訪問它。 – Shape