2016-11-29 11 views
0

Ich habe diesen Datensatz here und ich möchte einen einfachen Slider-Eingang erstellen, wo die jeweilige durchschnittliche Temperatur des Landes ändert sich durch die Änderung des Jahres. Bisher habe ich das geschrieben. Ich möchte die durchschnittliche Temperatur von Kanada in den Jahren von 1743 bis 2013 projizieren. Wie soll ich fortfahren, dies zu erreichen?Shiny R: Implementieren Schieberegler Eingang

ui.R

fluidPage(
    verticalLayout(
    titlePanel("Russian Average Temperature"), 
    plotOutput("plot1"), 
    wellPanel(
     sliderInput("Year", "Timeline", 1743, 2013, 
        value = 0, step = 1) 
    ) 
) 
) 

server.R

library(shiny) 
library(dplyr) 
library(tidyr) 
library(ggplot2) 

data <- read.csv("..\\GlobalLandTemperatures\\GlobalLandTemperaturesByState.csv", 
       fileEncoding = "UTF-8") 

function(input, output) { 

    data %>% 
    filter(Country=="Canada") %>% 
    separate(col = dt, into = c("Year", "Month", "Day"), convert = TRUE) ->cCanada 
    cCanada<-na.omit(cCanada) 

    cCanada %>% 
    filter(Year>1743) %>% 
    group_by(Year) %>% 
    summarise(Temp = mean(AverageTemperature)) ->cCanAvgTemp 

    output$plot1 <- renderPlot({ 
    plot(x = Year, y = AverageTemperature) 
    }) 
} 
+0

so möchten Sie die durchschnittliche Temperatur zwischen spezifischen Jahren angezeigt werden, das ist ist in Ihrem Schieber gewählt worden? –

+0

Ja, so etwas. Indem ich den Schieberegler verschiebe, möchte ich die spezifische Temperatur dieses Jahres in dem jeweiligen Land zeigen. – johnalias91

Antwort

0

Sie müssen reaktive Dataset erstellen, so dass es so aussehen:

data <- reactive({ 
    if(!is.null(input$Year)){ 
     data<-cCanAvgTemp %>% 
     filter(cCanAvgTemp[ ,Year] >= input$Year[1]) 
    } 
    data 
    }) 

output$plot1 <- renderPlot({ 
    plot(data=data(),x = Year, y = Temp) 
    }) 

[EDIT] Voll Code:

library(shiny) 
library(dplyr) 
library(tidyr) 
library(ggplot2) 

data <- read.csv(".../data.csv") 

ui <- fluidPage(
    verticalLayout(
    titlePanel("Russian Average Temperature"), 
    plotOutput("plot1"), 
    wellPanel(
     sliderInput("Year", "Timeline", 1743, 2013, 
        value = 0, step = 1) 
    ) 
) 
) 

server <- function(input, output) { 

    data %>% 
    filter(Country=="Canada") %>% 
    separate(col = dt, into = c("Year", "Month", "Day"), convert = TRUE) ->cCanada 
    cCanada<-na.omit(cCanada) 

    cCanada %>% 
    filter(Year>1743) %>% 
    group_by(Year) %>% 
    summarise(Temp = mean(AverageTemperature)) ->cCanAvgTemp 

    data2 <- reactive({ 
    data <- as.data.frame(cCanAvgTemp) 
    if(!is.null(input$Year)){ 
     data<-data %>% 
     filter(data$Year >= input$Year[1]) #to get value for choosen year change >= sign to == 
    } 
    data 
    }) 

    output$plot1 <- renderPlot({ 
    data2 <- data2() 
    ggplot(data= data2, aes(x = Year, y = Temp)) + geom_line() 
    }) 
} 

shinyApp(ui = ui, server = server) 

Ergebnis:

enter image description here

+0

Werfen Sie einen Blick auf die Bearbeitung. Aber Sie extrahieren einen Jahr von dt Spalte Name genau in diesem Punkt: 'Daten%>% Filter (Land ==" Kanada ")%>% getrennt (col = dt, in = c (" Jahr "," Monat " , "Tag"), convert = TRUE) -> cCanada' –

+0

Danke! Ich möchte meine Frage angeben: Nachdem ich Ihren Code hinzugefügt habe, erscheint "Error: object 'Year' not found". Was ist mein Fehler in diesem Fall? – johnalias91

+0

Haben Sie die bearbeitete Version ausprobiert? denn wenn ich es laufe, erscheint kein Fehler –