Не совсем ожидаемые результаты при использовании фильтра - PullRequest
0 голосов
/ 11 октября 2019

Все еще очень плохо знаком с R или любым программированием, представляя некоторые данные о состоянии здоровья в отделе и подумав, что я попытаюсь написать что-то, что позволит мне выбрать, какое подмножество данных отображать. Сделал некоторое самостоятельное чтение и попробовал следующее (пожалуйста, см. Ниже).
Проблема, с которой я столкнулся, состоит в том, что, когда я выбираю все 4 «Хирургических подхода», я получаю не те результаты, которые ожидаю. Например, среднее значение LOS для июля 2019 года должно быть ниже, чем то, что я вижу здесь.

Как я уже сказал, очень плохо знаком с этим, пожалуйста, предположите, что я ничего не знаю, отвечая на этот вопрос.

# User Interface

ui <-basicPage(
  sliderInput("year", "Select Year:", animate = T,
              min = 2016, max = 2019, value = 2016, sep = ""),

  checkboxGroupInput("approach", "Surgical Approach", c("Laparoscopic", "Lap-assisted", "Converted to open", "Open"),
                     selected = c("Laparoscopic", "Lap-assisted", "Converted to open", "Open")),

plotOutput(outputId = "LOS_plot"),

  plotOutput(outputId = "All3_plot")
)

# Server

server <- function(input, output){

  output$LOS_plot <- renderPlot({

    ERAS %>% filter(Sx_Approach == input$approach) %>% 
      arrange(year_m) %>% 
      mutate(DoSdate = ymd(year_m), yearDoS = year(DoSdate), monthDoS = month(DoSdate)) %>% 
      filter(yearDoS == input$year) %>%
      group_by(year_m) %>% mutate(mean_LOS = mean(Postop_LOS)) %>%
      ggplot(aes(x = monthDoS, y = mean_LOS)) + geom_line(colour = "black", size = 1.5) +
      scale_x_continuous(limits = c(1, 12), breaks = c(1:12)) +
      scale_y_continuous(limits = c(0, 30), minor_breaks = 1) +
      theme(aspect.ratio = 0.4) + xlab("Month") + ylab("Days") + ggtitle("Mean Length of Stay over Time")

  })
  output$All3_plot <- renderPlot({

    ERAS %>% filter(Sx_Approach == input$approach) %>%
      arrange(year_m) %>% 
      mutate(DoSdate = ymd(year_m), yearDoS = year(DoSdate), monthDoS = month(DoSdate)) %>% 
      filter(yearDoS == input$year) %>%
      group_by(year_m) %>% mutate(mean_All3 = mean(All_3 == T, na.rm = T)) %>%
      ggplot(aes(x = monthDoS, y = mean_All3)) + geom_line(colour = "#5391c6", size = 1.5) + scale_x_continuous(limits = c(1, 12), breaks = c(1:12)) +
      scale_y_continuous(labels = scales::percent, limits = c(0, 1)) +
      theme(aspect.ratio = 0.4) + xlab("Month") + ylab("Percentage") + ggtitle("Patients Achieving All Three ERAS Goals")

  })
}

1 Ответ

0 голосов
/ 15 октября 2019

Вместо того, чтобы использовать «фильтр», попробуйте использовать «подмножество», чтобы выбрать только часть вашего фрейма данных с вашими sliderInput и checkboxGroupInput. Не зная структуры данных, которую вы используете, это выглядело бы примерно так:

ERAS <-  subset(Sx_Approach, (year==input$year & approach==input$approach))
...