希望大家一切都好。我面临着ShinyApps的一个小问题。 我已附上我需要的图片。 我基本上是针对 mtcars 数据的 cyl 变量。如果我从中按 4 ,则要求过滤后的数据具有4个名称,其余变量的名称带有 4 个。 同样,如果我同时按 4和6 ,则需要过滤的数据,其中包含 cyl 的4和6,以及附加到变量其余部分的 4和6 名称。 所附图片将使事情更容易理解。 我也附上我的代码。 请指导我。预先捆绑感谢:)
data_table<-mtcars
library(shiny)
ui <- fluidPage(
checkboxGroupInput(inputId = "variables", label = "Choose number(s):",
choices =c("4","6", "8"),
selected = c("4")),
DT::dataTableOutput("distable"))
server <- function(input, output){
thedata <- reactive({
if(input$variables != '0'){
data_table<-data_table[data_table$cyl %in% input$variables,]
}
#
# if(input$variables == '4'){
# names(data_table)[3:11]<-paste( "four","_" ,names(data_table)[3:11])
# }
#
# if(input$variables == '6'){
# names(data_table)[3:11]<-paste( "six","_" ,names(data_table)[3:11])
# }
#
# if(input$variables == '8'){
# names(data_table)[3:11]<-paste( "eight","_" ,names(data_table)[3:11])
# }
#
#
})
output$distable = DT::renderDataTable({
DT::datatable( filter = "top",
{ thedata() # Call reactive thedata()
})
})
}
shinyApp(ui = ui, server = server)
答案 0 :(得分:0)
使用-
data_table<-mtcars
library(data.table)
repl <- list("4"="four","6"="six","8"="eight")
library(shiny)
ui <- fluidPage(
checkboxGroupInput(inputId = "variables", label = "Choose number(s):",
choices =c("4","6", "8"),
selected = c("4")),
DT::dataTableOutput("distable"))
server <- function(input, output){
thedata <- reactive({
if(input$variables != '0'){
data_table<-data_table[data_table$cyl %in% input$variables,]
colnames(data_table) <- gsub(paste( paste("_",sapply(repl, paste),sep=""),collapse="|"),"", colnames(data_table))
cols <- colnames(data_table)
suffix <- paste(paste("_", sapply(repl[input$variables],paste), sep=""),collapse="")
setnames(data_table, old = cols[3:length(cols)], new = paste(cols[3:length(cols)], suffix, sep=""))
}
#
# if(input$variables == '4'){
# names(data_table)[3:11]<-paste( "four","_" ,names(data_table)[3:11])
# }
#
# if(input$variables == '6'){
# names(data_table)[3:11]<-paste( "six","_" ,names(data_table)[3:11])
# }
#
# if(input$variables == '8'){
# names(data_table)[3:11]<-paste( "eight","_" ,names(data_table)[3:11])
# }
#
#
})
output$distable = DT::renderDataTable({
DT::datatable( filter = "top",
{ thedata() # Call reactive thedata()
})
})
}
shinyApp(ui = ui, server = server)
这将为您提供所需的后缀。对于此mtcars
示例,cbind
部分是不可能的,因为每个过滤器的行长都不同,但这将为您提供一个良好的开端。
说明
我们使用
repl <- list("4"="four","6"="six","8"="eight")
用于创建初始查询以将input$variables
映射到要使用的后缀。
在thedata
函数中进行实际过滤之后,会发生以下情况-
colnames(data_table) <- gsub(paste( paste("_",sapply(repl, paste),sep=""),collapse="|"),"", colnames(data_table))
这是用于重置您可能已经完成的所有先前的重命名。因此它将替换后缀_four
,_six
等,以便您可以重新开始。
cols <- colnames(data_table)
suffix <- paste(paste("_", sapply(repl[input$variables],paste), sep=""),collapse="")
suffix
准备后缀,该后缀取决于_four
的选择数量,可以对应_four_six
input$variables
此部分使用 setnames(data_table, old = cols[3:length(cols)], new = paste(cols[3:length(cols)], suffix, sep=""))
库中带有setnames
的后缀进行最终替换,这有助于替换R data.table
中列名的子集。