Shiny计算数据帧中列的平均值

时间:2016-05-19 20:54:44

标签: r dataframe shiny mean

我正在尝试计算数据框中所有列的平均值,但我得到错误:参数不是数字或逻辑:返回NA。 这是我正在使用的代码:

UI.R

library(shiny)
library(shinydashboard)
library(plyr)
library(reshape2)

#library(data.table)

shinyUI(pageWithSidebar(
  headerPanel("CSV Viewer"),
  sidebarPanel(
    fileInput('file1', 'Choose CSV File',
              accept=c('text/csv', 'text/comma-separated-values,text/plain', '.csv'))


  ),
  mainPanel(

    tableOutput('data'),
    verbatimTextOutput('mean')

  )
))

server.UI

shinyServer(function(input, output,session) {

  output$data <- renderTable({
    inFile <- input$file1

    if (is.null(inFile))
      return(NULL)

    data<-data.frame(read.csv(inFile$datapath, header=FALSE, sep=";"))

  })
  output$mean<-renderPrint({

   mean(data)

  })
})

我完全迷失了,我无法弄清楚错误。请帮我。感谢。

2 个答案:

答案 0 :(得分:1)

好的,所以你的主要问题是你试图采用数据帧的平均值,这是使用mean()函数无法实现的。这段代码应该可以工作(注意,因为你没有提供任何我做过的示例数据 - 我在那里投入了一个日期列,而且函数没有取其平均值。)

shinyServer(function(input, output,session) {

  dataset <- reactive({
    #Change the below line
    data.frame(a=c(1,2,3),b=c(2,4,5),c=as.Date(c("12/31/09","12/31/10","12/31/11"),"%m/%d/%y"))

  })

  output$mean<-renderPrint({

   colMeans(dataset()[,which(sapply(dataset(), class) != "Date")])

  })
})

请注意,我调用了dataset(),这允许我引用数据。这应该给你预期的输出。请注意,我还在数据集中所有不属于colMeans类型的列上调用Date函数。您还应该能够将我的数据帧定义替换为我的。也就是说,在我的代码中,您只需将data.frame(a=c(1,2,3),b=c(2,4,5),c=as.Date(c("12/31/09","12/31/10","12/31/11"),"%m/%d/%y"))替换为renderTable()来电中的代码。

希望这有帮助。

编辑:根据以下评论,您可以在renderTable电话中定义您的数据并在renderPrint中引用它。两个主要问题是read.csv()中数据的定义以及尝试在数据帧上调用mean。后一个问题由colMeans()修复,前者使用@Mouna中的代码修复:dataset<-data.frame(read.csv(inFile$datapath, header = FALSE, sep = ";", dec = ","))

答案 1 :(得分:0)

您可以使用“ colMeans(。)”命令计算数据框每列的平均值。它返回一个向量,其每个元素是数据框中每列的平均值。