R-код для создания процента столбца в рамках Shiny реактивного - PullRequest
0 голосов
/ 02 октября 2019

Я занимаюсь разработкой интерактивного приложения Flexdashboard Shiny, которое размещает подкадр данных, подсчитывает счета и производит процент от этого столбца. Затем он вытягивает значение процента, чтобы поместить его в valueBox.

. Проблема в том, что когда данные являются подмножеством, а столбец содержит 0%, count() и tally() удаляют их из data.frame. и, следовательно, я не могу поместить 0% в valueBox.

Вот упрощенный пример данных:

key <- 1:9
county <- rep(c("a","b","c"), times = 3)
immigrant <- c(1,0,1,0,0,1,1,0,1)
df <- data.frame(key, county, immigrant)
df
  key county immigrant
1   1      a         1
2   2      b         0
3   3      c         1
4   4      a         0
5   5      b         0
6   6      c         1
7   7      a         1
8   8      b         0
9   9      c         1

Упрощенная структура приложения Shiny:

selectInput(inputId = "countyInput", label = "Select a county",
            choices = unique(df$county),
            selected = "a")

vboxfilter <- reactive({
  df %>% filter(county == req(input$countyInput)) %>% 
         filter(county == req(input$countyInput))
})

output$vimmigrant<- renderValueBox({

  v1 <- df() %>% 
          count(immigrant) %>% 
          mutate(Percent = paste0(round(n/sum(n)*100,2), "%"))

  x <- v1[[2,3]]

  valueBox(x)

})

valueBoxOutput("vimmigrant")

Я генерирую проценты для valueBox с

df %>% group_by(county) %>% count(immigrant) %>% mutate(perc = n/sum(n))

  county immigrant     n  perc
  <fct>      <dbl> <int> <dbl>
1 a              0     1 0.333
2 a              1     2 0.667
3 b              0     3 1    
4 c              1     3 1 

Таким образом, когда реактивная функция фильтрует county == "b", она не может получить значение на v1[[2,3]] и выдает ошибку. Столбец county удаляется, когда он подмножество данных.

Я немного искал и не могу найти решение этой проблемы. Я новичок в Shiny и в основном использую обозначение tidyverse. Мне не удалось заставить реагирующие функции работать с нотацией в скобках, что, как мне кажется, сдерживает меня в этом случае.

Я изучил table () и другие инструменты сводки, чтобы просто извлечь значенияв процентах, как разные индексы, но не повезло.

В идеале, я ищу обходной путь или способ дополнить функцию count() для получения

immigrant n  perc
  <dbl> <int> <dbl>
1   0     1 1.00%
2   1     2 0.00%

, чтобы я могиспользуйте v1[[2,3]], чтобы получить значение для valueBox. Любые обходные пути или советы приветствуются.

Спасибо за помощь, ребята, надеюсь, описание моей проблемы было понятным.

1 Ответ

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

Я немного запутался в этом вопросе, но если вы просто хотите извлечь проценты, оставшиеся после фильтра, вы можете сделать

(df %>% group_by(county) %>% count(immigrant) %>% mutate(perc = immigrant/sum(n)))[,4]

Я также думаю, что вы пытаетесь получить процент, который иммигранты, поэтому я изменилсявычисление в процентах до perc = immigrant/sum(n), а не perc = n/sum(n), но, возможно, я просто не совсем понимаю вашу цель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...