Фильтр данных кадра в R блестящий - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь создать простое блестящее приложение, которое принимает в качестве входных данных фрейм данных в следующей структуре:

A B C D E F G Y
1 1 1 x x x   x
1 2 1 x   x
1 2 2   x x   x
1 2 2   x   x x
2 1 1 x  x  x 

Я бы хотел иметь возможность фильтровать данные в R блестящие на основе значений столбцов (D, E, F, G и Y), заданных в качестве флажков. Флажки сгруппированы следующим образом:

Category1 Checkboxes (D, E)
Category2 Checkboxes (F, G, Y)

Одно решение, которое я реализовал, состоит в том, чтобы создать подмножество (сохраняя соответствующие столбцы категорий), преобразовать эту таблицу в длинный формат и выполнить фильтрацию на основе пары key,value. Однако я ищу решение, в котором мне не нужно выполнять преобразование.

Кто-нибудь может подсказать мне, как это реализовать?

Вот воспроизводимые данные:

dput(test)
structure(list(A = c(1L, 1L, 1L, 1L, 2L), B = c(1L, 2L, 2L, 2L, 
1L), C = c(1L, 1L, 2L, 2L, 1L), D = structure(c(2L, 2L, 1L, 2L, 
2L), .Label = c("", "x"), class = "factor"), E = structure(c(2L, 
1L, 2L, 2L, 1L), .Label = c("", "x"), class = "factor"), F = structure(c(2L, 
1L, 2L, 2L, 2L), .Label = c("", "x"), class = "factor"), G = structure(c(2L, 
1L, 1L, 1L, 1L), .Label = c("", "x"), class = "factor"), Y = structure(c(2L, 
1L, 2L, 1L, 1L), .Label = c("", "x"), class = "factor")), .Names = c("A", 
"B", "C", "D", "E", "F", "G", "Y"), class = "data.frame", row.names = c(NA, 
-5L))
  • Пробел - это просто NA, что означает, что строки, в которых столбец содержит только NA, не должны учитываться при фильтрации.

  • Флажки сгруппированы, как в этом примере: Категория 1 (D и E) означает, что в этой категории можно выбрать либо D или E, либо оба.

Когда я устанавливаю флажок E, в отфильтрованном выводе должны оставаться только строки, в которых E содержит x.

Если я установлю другой флажок, скажем, G, список строк будет сокращен до строк, где E и G содержат x

Надеюсь, это лучше прояснит проблему.

Вот мой код:

ui.R

library(shiny)
library(shinythemes)
library(shiny)
library(shinydashboard)
library(shinycssloaders)  
library(plotly)

dashboardPage(skin="blue", dashboardHeader(title = "test"),

              dashboardSidebar(
                sidebarMenu(
                  menuItem("Export Page", tabName = "main", icon = icon("dashboard"))

                )
              ),
              dashboardBody(
                tags$head(
                  tags$link(rel = "stylesheet", type = "text/css", href = "custom.css")
                ),
                #tags$head(tags$link(rel = "icon", type = "image/png", href = "favicon.png"), tags$title("LinkAnalysis")),
                tabItems(
                  tabItem(tabName = "main",
                          sidebarPanel(
                            fluidPage(
                              uiOutput("checkboxes_cat1"),
                              uiOutput("checkboxes_cat2")
                            )
                          ),
                          mainPanel(
                            tableOutput("table")
                          )
                  )
                )
              )
)

server.R

library(shiny)
library(shinythemes)
library(ggplot2)
library(dplyr)


test <- read.table('test.csv', sep=';', header =  T)

shinyServer(function(input, output) {

  output$checkboxes_cat1 <- renderUI({
    return(checkboxGroupInput("cat1", "Category 1", choices = levels(as.factor(colnames(test[4:5])))))
  })

  output$checkboxes_cat2 <- renderUI({
    return(checkboxGroupInput("cat2", "Category 2", choices = levels(as.factor(colnames(test[5:7])))))
  })

  filtered<-reactive({ 


  #d <- test[,input$cat1,drop=FALSE] 
  #d
    #### the filtering should be done here
    test

  })

  output$table<-renderTable({

    filtered()

    })

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