2016-10-02 121 views
0

我想从Shiny聚合一个反应表。我的结构类似于this example如何聚合闪亮的反应表?

library(shiny) 

runApp(list(
    ui=pageWithSidebar(headerPanel("Adding entries to table"), 
        sidebarPanel(textInput("text1", "Column 1"), 
            textInput("text2", "Column 2"), 
            actionButton("update", "Update Table")), 
        mainPanel(tableOutput("table1"))), 
    server=function(input, output, session) { 
    values <- reactiveValues() 
    values$df <- data.frame(Column1 = NA, Column2 = NA) 
    newEntry <- observe({ 
     if(input$update > 0) { 
     newLine <- isolate(c(input$text1, input$text2)) 
     isolate(values$df <- rbind(values$df, newLine)) 
     } 
    }) 
    output$table1 <- renderTable({values$df}) 
    })) 

我试图用多种方法,例如:

output$table2 <- renderTable({ 
    as.data.frame(values$Column1, list(values$Column2), sum 
}) 

但是到现在为止我也没有预期的结果。你有想法吗?

+0

抱歉的版本。这是我第一次来... –

+0

预期的结果是什么?这只是添加值?或添加第二个表? – Geovany

+0

添加第二个包含汇总值的表格。 例如,如果第1列是数字,而第2列是在条目的一栏中从A到E的字母。然后例如按字母(函数和)聚合一列。 –

回答

1

您是否正在寻找像行数一样的东西?我sum使用apply功能,但

output$table1 <- renderTable({cbind(values$df, Rowsum = apply(values$df, 1, function(x) sum(as.numeric(x))))}) 

另外,如果你想删除的第一个空行,你可以使用的建议SO问你linked

它看起来像这样:

enter image description here

完整代码:

library(shiny) 

runApp(list(
    ui=pageWithSidebar(headerPanel("Adding entries to table"), 
        sidebarPanel(textInput("text1", "Column 1"), 
            textInput("text2", "Column 2"), 
            actionButton("update", "Update Table")), 
        mainPanel(tableOutput("table1"))), 
    server=function(input, output, session) { 
    values <- reactiveValues() 
    values$df <- data.frame(Column1 = numeric(0), Column2 = numeric(0)) 
    newEntry <- observe({ 
     if(input$update > 0) { 
     newLine <- isolate(c(input$text1, input$text2)) 
     isolate(values$df[nrow(values$df) + 1,] <- c(input$text1, input$text2)) 
     } 
    }) 
    output$table1 <- renderTable({cbind(values$df, Rowsum = apply(values$df, 1, function(x) sum(as.numeric(x))))}) 
    })) 

请注意,没有执行异常处理。

+0

Thanks ....我的代码中有一个错误: 输出$ table2 < - renderTable({aggregate(values $ column1,list(values $ column2),sum) 我忘了写聚合... –

+0

没问题,查看链接的stackoverflow问题中删除空行的建议(也在我的代码中实现) 也欢迎Stack Overflow。如果这个答案或其他解决了你的问题,请将它标记为 – GyD

+0

是的,那是!放好NAS,谢谢你非常。这里我的代码: 输出$ table2 < - renderTable({(聚合(as.numeric(values $ df $ Column1),(list(Variety = values $ df $ Column2)),sum))}) –