4

我制作了一个上传按钮,通过它我正在上传一个闪亮的 .CSV 文件[数据集]。

dataframe <- data.frame(A=c(2,3,4,5,6,7,3,7,8,9,2),B=c(3,7,8,9,2,1,2,3,4,5,6),C=c(1,1,1,2,2,1,1,1,1,2,2))

在 ui.R 中:

fileInput('datafile', 'Choose CSV file',
     accept=c('csv', 'comma-separated-values','.csv')),
     actionButton("uploaddata", "upload"),

我想在数据集上执行诸如“a+b”和“ab”之类的操作,并在 actionButton 的帮助下将其作为新列添加到我的数据集中。

问题 1:我尝试使用 tableOutput() 函数在 shinyapp 中显示 DATA,但它在 R 控制台中显示 DATA 数据框。

在 server.R 中:

DATA <- dataframe %>% group_by(C) %>% mutate(A) %>% 
mutate(B) %>% mutate(add = (A+B)) %>% mutate(sub = (A-B))

问题 2:我想使用 DATA 作为输入来制作 (add, sub) 的 ggplots

4

1 回答 1

8

你可以这样做:

用户界面

library(shiny)

shinyUI(fluidPage(
        fileInput('datafile', 'Choose CSV file',
                accept=c('csv', 'comma-separated-values','.csv')),
        tableOutput('table'),
        plotOutput('plot')
        ))

服务器.R

library(shiny)
library(ggplot2)

shinyServer(function(input, output,session) {

        dataframe<-reactive({
                if (is.null(input$datafile))
                        return(NULL)                
                data<-read.csv(input$datafile$datapath)
                data<- data %>% group_by(C) %>% mutate(A) %>% 
                        mutate(B) %>% mutate(add = (A+B)) %>% mutate(sub = (A-B))
                data
        })
        output$table <- renderTable({
                dataframe()
        })
        output$plot <- renderPlot({
                if(!is.null(dataframe()))
                        ggplot(dataframe(),aes(x=X,y=add))+geom_point()
        })
})

我删除了操作按钮,因为fileInput一旦用户选择它就会直接加载文件。在 中server.R,加载dataframe的值存储在反应值中,dataframe()当您想要绘制/渲染表格以获取数据框时可以调用。

您可能还想编写代码来检查您的 csv 文件是否有 A 和 B 作为列等。

于 2015-07-23T14:52:53.073 回答