繁体   English   中英

闪亮地计算数据框中列的平均值

[英]Shiny calculate the mean of columns in dataframe

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

用户界面

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')

  )
))

服务器界面

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)

  })
})

我完全迷路了,无法找出错误。 请帮我。 谢谢。

好的,所以您的主要问题是,您尝试获取数据帧的均值,而使用mean()函数则无法实现。 该代码应该可以工作(请注意,因为您没有提供我编写的任何示例数据-我在其中添加了一个date列,并且该函数不使用它的意思)。

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() ,它允许我引用数据。 这应该给您预期的输出。 请注意,我还会在数据集中所有非Date类型的列上调用colMeans函数。 您还应该能够用您的数据框定义代替我的。 也就是说,在我的代码中,您只需要替换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() ,前一个问题由colMeans()代码解决: dataset<-data.frame(read.csv(inFile$datapath, header = FALSE, sep = ";", dec = ","))

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM