Rshiny - как определить логику сервера для моего набора данных - PullRequest
0 голосов
/ 02 апреля 2019

Здравствуйте, красивые люди,

У меня возникли проблемы с корректной логикой сервера в текущем 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)
...