2016-09-05 7 views
0

私は、ユーザーが選択した複数のテキストファイルを処理するShinyアプリケーションを構築しています。 出力は、数百万の行と数十の列を持つ巨大なデータフレームです。 私は今、ユーザーが対話的に行をフィルタリングし、列を選択し、列を要約できるようにしたいと考えています(mean、sd、max、min、sumなどの関数リストから選択することによって)。その結果、ユーザー選択ごとのデータを要約したデータフレームが小さくなります。基本的に、dplyrライブラリの基本機能を実装するGUIを作成する必要があります。Shinyのdplyr機能のインタラクティブなバージョンを構築する

一般的に、GUI要素を手動で作成し、いくつかのdplyrコマンドを使ってそれらをサーバー機能に供給することで、その方法を知っています。これはきわめて標準的な機能(データフレームをフィルタリングして要約するGUI)であると思われるので、最初から構築を開始する前に、そのままの状態で使用することも、出発点として使うこともできます。 。

+0

rpivotTableはあなたの望むものに非常に近いです。輸出を除きます。彼らがエクスポートしたい場合は、おそらくコールバックを掘り、テーブルの現在の状態を取得する必要があります。 – Shape

+0

私は自分の質問を編集しました。私は実際には、ソリューションの一部であるためにグラフィックスとエクスポート機能を必要としません。私は特定の要件ごとに自分自身を簡単に実装することができます。これに関して、rpivotTableは、グラフィックをやろうとするので必要なものではありませんが、あまりエレガントではありません。カスタマイズオプションは表示されません。また、集計されたデータフレームは返されないため、結果を処理することはできません(データのエクスポートや独自のグラフィックの作成など)。 – Sasha

+0

実際にはかなりの数のカスタマイズオプションがありますが、ドキュメントのためにpivottable.jsをチェックアウトする必要があります(DTのようなRの他のJSライブラリポートと同様、ドキュメントはほとんどがJSライブラリのために残ります)。更新、htmlウィジェットは単なるラッパーです)。あなたの出力を光沢のあるオブジェクトとして返す方法も見つけました。あなたはrpivotTableでonRefreshパラメータを使用して、DOM経由でアクセスするだけです。 – Shape

答えて

2

私はあなたがrpivotTableあなたは後にしているかなりのものではありませんでしたが、私は重い物を持ち上げるのいくつかを行うように構成することができると思い、

ここで操作のためのrpivotTableDTを使用して(例だと言った知っています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); 
         }") 
    ) 
    }) 

} 
関連する問題