我正在尝试使用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。
提前致谢。
答案 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 = "+"))))
}
}