RShiny-删除从dplyr链输出的透视表无关列
目前正在使用来自RShiny-删除从dplyr链输出的透视表无关列,r,function,dplyr,shiny,R,Function,Dplyr,Shiny,目前正在使用来自dplyr的starwars数据集,并构建了一个RShiny Pivot表应用程序。当前,在呈现数据表输出时,它返回所有列和度量值对。例如,如果最终用户输入了2个度量值,2个函数聚合(单元格填充),它将从度量值和聚合函数总组合(2*2)返回4列。最终目标是能够仅将度量值与为其指定的聚合函数配对 因此,在本例中,您可以看到选中的行是hair\u color和skin\u color。所选列为高度和质量。选择的单元格填充(聚合函数)为平均值和中值。在这个RShiny应用程序中点击ru
dplyr
的starwars
数据集,并构建了一个RShiny Pivot表应用程序。当前,在呈现数据表输出时,它返回所有列和度量值对。例如,如果最终用户输入了2个度量值,2个函数聚合(单元格填充),它将从度量值和聚合函数总组合(2*2)返回4列。最终目标是能够仅将度量值与为其指定的聚合函数配对
因此,在本例中,您可以看到选中的行是hair\u color
和skin\u color
。所选列为高度
和质量
。选择的单元格填充(聚合函数)为平均值
和中值
。在这个RShiny应用程序中点击runquery
,它将返回6列(#尺寸+(#度量*#聚合)=2+(2*2)=6。这将返回列头发颜色
,肤色
,高度
,质量
,高度
,质量
但是,我只希望它返回头发颜色
,肤色
,身高
,和体重中位数
(根据您在UI中看到的特殊顺序)
在dplyr
链中的mutate
语句中是否有一个特定的语句,或者我可以(最终)创建另一个函数来实现这一点
*注意:不查找硬编码示例,但如果“Inputed”列和“Inputed”聚合函数包含“xyz”(仅基于用户输入),则更多,然后保留/删除这些列
另外,我确实希望首先在dataframe中填充every measure-aggregate函数对,然后在最后找到一种方法来删除用户界面中不需要的列
非常感谢你的帮助
下面的代码片段
library(DT)
library(shiny)
library(shinydashboard)
library(dplyr)
ui <- function(request) {
dashboardPage(
dashboardHeader(title = "SW Pivot"),
dashboardSidebar(
actionButton("runit", "RUN QUERY"),
hr(),
h4(HTML(" "), "Select Table Rows"),
uiOutput('rowSelect'),
hr(),
h4(HTML(" "), "Select Table Columns"),
uiOutput('colSelect'),
hr(),
h4(HTML(" "), "Select Table Cell Fill"),
uiOutput('aggSelect'),
hr()
),
dashboardBody(dataTableOutput("data"))
)
}
data <- starwars
server<-shinyServer(function(input, output, session) {
# Identify Measures, Dimensions, and Functions --------------
dimensions <- colnames(data)[!sapply(data, is.numeric)]
measures <- colnames(data)[sapply(data, is.numeric)]
functions_string <- c(count = "length",
mean = "mean",
sum = "sum",
median = "median",
max = "max",
min = "min")
output$rowSelect <- renderUI({
selectizeInput(
inputId = "dimensions",
label = NULL,
multiple = TRUE,
choices = dimensions,
selected = c()
)
})
output$colSelect <- renderUI({
selectizeInput(
inputId = "measures",
label = NULL,
multiple = TRUE,
choices = measures,
selected = c()
)
})
output$aggSelect <- renderUI({
selectizeInput(
inputId = "funChoices",
label = NULL,
multiple = TRUE,
choices = functions_string,
selected = c()
)
})
pivotData <- reactive({
input$runit
isolate({
measuresVec <- input$measures
dimensionsVec <- input$dimensions
funsList <- lapply(input$funChoices, match.fun)
names(funsList) <- input$funChoices
pivotData <- data %>%
group_by_at(vars(dimensionsVec)) %>%
summarize_at(vars(measuresVec), funsList, na.rm = TRUE)
})
return(pivotData)
})
output$data <- renderDataTable({
tabledata <- pivotData()
datatable(tabledata)
})
})
shinyApp(ui, server)
库(DT)
图书馆(闪亮)
图书馆(shinydashboard)
图书馆(dplyr)
用户界面