2016-05-19 8 views
0

Ich versuche, den Mittelwert aller Spalten in einem Datenrahmen zu berechnen, aber ich bekomme den Fehler: Argument ist nicht numerisch oder logisch: Rückgabe von NA. Hier ist der Code, den ich mit:Shiny den Mittelwert der Spalten in Datenrahmen berechnen

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) 

    }) 
}) 

ich völlig verloren bin und ich kann nicht herausfinden, die Error. Bitte hilf mir. Vielen Dank.

+2

Ich habe Ihren Code nicht gründlich durchgesehen, aber Sie versuchen, den Mittelwert eines "data.frame" -Objekts zu nehmen. Wenn man '' mean' 'sieht, wird diese Funktion für Datenrahmen nicht unterstützt. Wenn Sie eine bestimmte Spalte wollen, versuchen Sie 'mean (data $ MY_COL) ' –

+0

Es funktioniert immer noch nicht. Gibt es eine andere Möglichkeit, den Mittelwert eines Datenrahmens zu berechnen? – Mouna

+1

Was meinen Sie mit dem Mittelwert eines Datenrahmens? Möchten Sie den Mittelwert von jedem Wert im Datenrahmen? Willst du den Mittelwert jeder Spalte? Jede Reihe? Etwas anderes? Was planen Sie mit kategorialen Variablen? Termine? Andere nicht-numerische Werte? – Gregor

Antwort

1

Ok, also Ihr Hauptproblem, dass Sie versuchen, den Mittelwert eines Datenrahmens zu nehmen, was mit der mean() Funktion nicht möglich ist. Dieser Code sollte funktionieren (beachte, da du keine Beispieldaten angegeben hast, die ich selbst erstellt habe - ich habe dort eine Datumsspalte eingefügt und die Funktion nimmt den Mittelwert nicht an).

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")]) 

    }) 
}) 

Bitte beachte, dass ich dataset() nennen, die mir die Daten verweisen kann. Dies sollte Ihnen Ihre erwartete Leistung geben. Beachten Sie, dass ich auch die Funktion colMeans für alle Spalten im Dataset aufruft, die nicht vom Typ Date sind. Sie sollten auch in der Lage sein, Ihre Dataframe-Definition für meine zu ersetzen. Das heißt, in meinem Code würden Sie einfach 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")) durch Ihren Code in Ihrem renderTable() Anruf ersetzen.

Hoffe, das hilft.

EDIT: Per Kommentare unten, es stellt sich heraus, können Sie Ihre Daten in dem renderTable Anruf definieren und in den renderPrint verweisen. Die zwei Hauptprobleme waren die Definition der Daten in der read.csv() und der Versuch, mean auf Datenrahmen aufzurufen. Das letztere Problem wird durch colMeans() fixiert und der frühere fixiert wurde mit Code aus @Mouna: dataset<-data.frame(read.csv(inFile$datapath, header = FALSE, sep = ";", dec = ","))

+0

Vielen Dank @mikeyMike für Ihre Klarstellungen, aber ich fürchte, es funktioniert immer noch nicht, es gibt immer noch ein Problem in' colMeans (Dataset() [, die (sapply (df, class)! = "Date")]) 'selbst mit dem Datenrahmen, den du erstellt hast. – Mouna

+0

Entschuldigung, ich habe vergessen Code zu ändern. Sollte jetzt behoben sein, lass es mich wissen, wenn es funktioniert. –

+0

danke so viel @mikeyMike es funktioniert! Das Problem, das ich hatte, war in der Datei.csv, also musste ich 'read.csv (inFile $ datapath, header = FALSE, sep ="; ")' mit 'Datenmenge <-Daten ändern. Rahmen (lesencsv (inFile $ Datenpfad, Header = FALSE, sep = ";", dec = ","))). – Mouna

0

Sie den Mittelwert jeder Spalte eines Datenrahmens unter Verwendung berechnen Befehl ‚colMeans (.)‘. Es gibt einen Vektor zurück, dessen jedes Element der Mittelwert jeder Spalte in Ihrem Datenrahmen ist.