Я занимаюсь разработкой интерактивного приложения 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
. Любые обходные пути или советы приветствуются.
Спасибо за помощь, ребята, надеюсь, описание моей проблемы было понятным.