Rshiny-如何为我的数据集定义服务器逻辑

时间:2019-04-01 21:23:27

标签: r shiny data-visualization

你好漂亮的人,

我在使用当前的R项目来正确设置服务器逻辑时遇到了一些麻烦。我有一个奥运赛事历史数据集,包括运动员的地区或国家/地区,获得奖牌的年份等。

我想首先创建一个基本的视觉输出,并在滑动条中按年份对其进行过滤。我要显示的输出是按国家/地区计算的奖牌数量,使用水平堆叠的条形图,填充颜色分别对应于铜牌,银牌和金牌。

我的问题是在闪亮的服务器逻辑内链接输出,还能够按年份过滤数据。

有人可以帮我解决这两个问题吗?

可在此处找到数据集:

https://www.kaggle.com/heesoo37/olympic-history-data-a-thorough-analysis/data

我使用了一些函数来过滤数据,并创建了一个独特的函数以在闪亮应用的服务器逻辑中使用。

# unique function
  function(Region, Medal_count){

  #Count number of each medal type by country
  Medal_count <- Olympic %>% 
    filter(!is.na(Medal)) %>% 
    group_by(region, Medal) %>% 
    count(Medal, sort=FALSE) %>% 
    spread(key=Medal, value=n) %>%
    replace_na(list(Gold=0, Silver=0, Bronze=0)) %>% 
    mutate(Total=sum(Gold, Silver, Bronze)) %>% 
    arrange(desc(Total))

  Medal_total <- Olympic %>% 
    filter(!is.na(Medal)) %>% 
    group_by(region,Medal) %>% 
    summarize(Count = length(Medal))

  # arrange country by total medal count
  Rank <- Medal_total %>%
    group_by(region) %>%
    summarize(Total=sum(Count)) %>%
    arrange(Total) %>% 
    top_n(10)

  Medal_total$region <- factor(Medal_total$region,     levels=Rank$region)

  Medal_top <- na.omit(Medal_total)


  p <-ggplot(Medal_top, aes(x=region, y=Count, fill=Medal)) +
    geom_col() +
    coord_flip() +
    scale_fill_manual(values=c("gold1","gray70","gold4")) +
    ggtitle("Medal counts by country") +
    theme(plot.title = element_text(hjust = 0.5))

  return(p)
}


# my template for UI
library(shiny)
library(shinyWidgets)

ui <- fluidPage(
  titlePanel("Olympic History"),
  sidebarLayout(
    sidebarPanel(
      radioButtons(
        inputId = "radio",
        label = "select this",
        choices = list(
          "Choice 1" = 1,
          "Choice 2" = 2,
          "Choice 3" = 3)
      ),
      selectInput(
        inputId = "Sport",
        label = "Select your fav sport",
        choices = list(
          choose="",
          "Rugby",
          "Tennis",
          selected=NULL
        )
      ),
      sliderInput(
        inputId = "Year",
        label = "choose a year",
        min = 1988, max = 2016, value=1988, step = 2)
    ),
    mainPanel(
      plotOutput("bar")
    )
  ))

server <- function(input, output) {

 }

 shinyApp(ui = ui, server = server)

0 个答案:

没有答案