我正在尝试创建一个基本上是桌子的闪亮应用程序,带有一个关于标签。
有两件事我遇到了麻烦:
其中一列是美元金额。我想格式化为1,225美元。我能得到的最接近的是使用paste0,但是当你对列进行排序时,它不能按预期工作,而且我没有得到数千个逗号。
我希望能够在一个带有“All,A,C,D”选项的下拉菜单中。如果我选择“A”,它将仅显示“Something == A”的表格。现在这是有效的,但我不确定我是否以最好的方式编码。
这是我的ui.R
library(shiny)
shinyUI(fluidPage(
title = 'Some tittle',
sidebarLayout(
sidebarPanel(
checkboxGroupInput('show_vars', 'Columns to show:',
c("Something", "Money"),
selected = c("Money")),
selectInput(inputId = "Something",
label = "Choose a category",
choices = c("All", "A", "C", "D"),
selected = "All")
),
mainPanel(
tabsetPanel(
id = 'dataset',
tabPanel('Table', dataTableOutput('mytable1')),
tabPanel('about', includeMarkdown("about.md"))
)
)
)
))
我的服务器.R
library(shiny)
library(dplyr)
DF1 = data.frame("Rank"=1:4, "Something"=as.factor(c("A","A","C","D")), "Money"=c(2345.5, 1234.67, 5.2, 9878.46))
# change the data to have dollar sign
DF1 = DF1 %>% mutate(Money= paste0("$",round(Money,0)))
original = DF1
shinyServer(function(input, output) {
observe({
if(input$Something!="All"){
DF1 = original %>% filter(Something==input$Something)
# a large table, reative to input$show_vars
output$mytable1 <- renderDataTable({
DF1[, c("Rank", input$show_vars), drop = FALSE]
})
}else{
DF1 = original
output$mytable1 <- renderDataTable({
DF1[, c("Rank", input$show_vars), drop = FALSE]
})
}
})
})
和我的about.md
# Title
+ bla
+ bla
+ bla
感谢您的帮助!
答案 0 :(得分:1)
我有一个解决方案,但我确信这段代码会更好。如果有人可以就如何改进它给我建议,我会很感激:-)。我的解决方案是使用scale来添加逗号
我的服务器看起来像这样:
library(shiny)
library(dplyr)
library(scales)
DF1 = data.frame("Rank"=1:4, "Something"=as.factor(c("A","A","C","D")), "Money"=c(2345.5, 1234.67, 5.2, 9878.46))
# change the data to have dollar sign
DF1 = DF1 %>% mutate(Money=round(Money,0)) %>% mutate(Money=comma_format()(Money)) %>% mutate(Money=paste0("$",Money))
original = DF1
shinyServer(function(input, output) {
observe({
if(input$Something!="All"){
DF1 = original %>% filter(Something==input$Something)
# a large table, reative to input$show_vars
output$mytable1 <- renderDataTable({
DF1[, c("Rank", input$show_vars), drop = FALSE]
})
}else{
DF1 = original
output$mytable1 <- renderDataTable({
DF1[, c("Rank", input$show_vars), drop = FALSE]
})
}
})
})
我认为反应部分效率非常低,但我不确定如何改进它。