在一个闪亮的应用程序中,通过列名的组合来子集dataframe

在一个闪亮的应用程序中,通过列名的组合来子集dataframe,r,shiny,R,Shiny,我的数据框架如下: DF2 = data.frame(agency_postcode = factor(rep(c(12345,45678,24124,32525,32325),2)), car_group=factor(rep(c("Microcar","City car","Supermini","Compact","SUV"),2)), transmission=factor(rep(c("automatic","manu

我的数据框架如下:

DF2 = data.frame(agency_postcode = factor(rep(c(12345,45678,24124,32525,32325),2)),
                 car_group=factor(rep(c("Microcar","City car","Supermini","Compact","SUV"),2)),
                 transmission=factor(rep(c("automatic","manual"),5)))
我有一个闪亮的图标,用户可以从中选择一个或多个列名。我想要实现的是,在选择一个列名之后,返回数据框的所有值,这些值等于该列的第一行。当选择了多个列时,应该应用相同的逻辑。因此,例如,如果我选择了所有三列,则必须返回数据框的第一行,而不是无

#ui.r
library(shiny)
library(DT)

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
                 selectInput("sel","Filter by:",
                             choices = colnames(DF2),
                             multiple=T,selected = "agency_postcode")

    ),
    mainPanel(
      DT::dataTableOutput("D")

    )
  )
)
#server.r
#server.r
library(shiny)
library(DT)
server <- function(input, output) {

  output$D<-renderDataTable({
    DE<-DF2[ which(DF2[,input$sel] %in% DF2[1, input$sel]), ]
    datatable(DE)
  })

}

我们只需要指定rowindex、column name或column index和drop来区分大小写,以避免简化从data.frame到vector的维度。对于单列、单行大小写,默认情况下,如果选中?Extract,drop=TRUE

x[i,j,…,drop=TRUE]

下拉-用于矩阵和数组。如果为TRUE,则结果强制为最低可能维度,请参见示例。这只适用于提取元素,不适用于替换。有关更多详细信息,请参见drop

有了这些变化,这个应用程序运行得很好


当您选择2列时,标准是什么?如果要为每个选定列查找具有第一行值的行,只需执行DF2[1,输入$sel]这是可行的,但我得到的“数据”必须是二维的,例如数据框或矩阵,当我只选择一列时,我会给你,因为它回答了这个问题,但我将发布一个不同的案例,并在这里的评论中发布链接
DE <- DF2[1, input$sel, drop = FALSE]