2017-10-04 47 views
0

我正在嘗試使用Shiny構建類似數據透視表的UI的Excel,其中用戶可以選擇多個字段作爲行標題和一個字段作爲列標題。 我正在使用dcast創建數據透視表並在Shiny應用程序中顯示最終輸出。 我面臨的問題是,如果我不知道用戶將選擇多少列(因爲允許多個選擇),我該如何使用dcast?如何在RHS中使用動態LHS列數

基本上我想有這樣的事情:

dcast(data_table,列1 +列2 + ... + ColumnN〜ColumnsX,fun.aggregate =總和,value.var = ColumnZ)

哪裏, Column1,...,ColumnN,ColumnsX,ColumnZ都是用戶選擇的列。 選定列的列表在字符串的矢量可說: input_list = C(「列1」,「列2」,......,「ColumnN」)

我也開到這個替代解決方案問題,而不使用dcast。

在此先感謝。

回答

1

使用公式接口時,知道您也可以將其作爲文本字符串提供,這很方便。

dt <- data.frame(y = c(1,2,3), x1 = c(1,2,3), x2 = c(1,2,3)) 

對不起,這個無稽之談的例子,但它得到了重點。

下面是簡單的形式:

dcast(dt, y ~ x1 + x2) 

現在我們有as.formula提供它以文本形式:

dcast(dt, as.formula("y ~ x1 + x2")) 

在這裏,我們再進一步,使它完全動態的基礎上的變量命名:

dcast(dt, as.formula(paste("y ~", paste(grep("^x", colnames(dt), value = T), collapse = "+")))) 

這三者都提供相同的輸出。

而在你的閃亮應用的情況下,你可能會得到由用戶界面中的一些選擇方法提供的名稱向量。所以在這種情況下,它看起來像沿着這些線:

server <- function(input, output){ 
    output$sometable <- renderTable({ 
     dcast(dt, as.formula(paste("y ~", paste(input$someselectionmethod, collapse = "+")))) 
    } 
} 
+0

謝謝你的迴應。雖然第二個選項適用於我,但是當我的列名沒有模式時,我可以進一步改進第三個選項嗎? –

+0

那麼,你必須從某個地方得到名單。無論是來自其他對象,還是通過模式,或者通過外部文件提供......或者其他任何東西。它不能僅僅猜測名單的列表,你必須提供邏輯。 –