如何在R

时间:2017-10-04 06:22:34

标签: r rstudio shiny

我正在尝试使用Shiny构建像数据透视表UI这样的Excel,其中用户可以选择多个字段作为行标题,将一个字段选择为列标题。 我正在使用dcast创建一个数据透视表并在Shiny应用程序中显示最终输出。 我面临的问题是,当我不知道用户将选择多少列时,如何使用dcast(因为允许多次选择)?

基本上我想要这样的东西:

dcast(data_table,Column1 + Column2 + ... + ColumnN~ColumnsX,fun.aggregate = sum,value.var = ColumnZ)

其中, Column1,...,ColumnN,ColumnsX,ColumnZ都是用户选择的列。 所选列的列表在字符串向量中可用: input_list = c(" Column1"," Column2",...," ColumnN")

我也愿意接受这个问题的替代解决方案而不使用dcast。

提前致谢。

1 个答案:

答案 0 :(得分: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 = "+"))))

这三个都提供相同的输出。

在您的闪亮应用程序的情况下,您可能会获得UI中某些选择方法提供的名称向量。所以在这种情况下,它看起来像这样的东西:

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