2016-11-29 131 views
0

我有这个数据集here,我想创建一个简单的Slider输入,其中国家的相应平均温度将通过改变年份而改变。到目前为止,我已经写了这个。我想从1743年到2013年预测加拿大的平均气温。我应该如何着手实现这一目标?Shiny R:执行Slider输入

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

所以你想显示具体的年间的平均气温,多数民众赞成在了滑盖您已经choosen? –

+0

就是这样的。通过滑动滑块,我想演示特定国家当年的具体温度。 – johnalias91

回答

0

您需要创建反应数据集,所以它看起来就像是:

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

[编辑]全码:

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) 

结果:

enter image description here

+0

看看编辑。但是,您正是在这一点上提取了一个来自dt列名称的年份:'data%>%filter(Country ==“Canada”)%>% separate(col = dt,into = c(“Year” ,“Day”),convert = TRUE) - > cCanada' –

+0

谢谢!我想指定我的问题:添加代码后,弹出“Error:object'Year'not found”。这种情况下我的错误是什么? – johnalias91

+0

你试过编辑过的版本吗?因为当我运行它没有错误弹出 –