我有一个小应用程序,列出了客户,物品和销售。我想从表中生成一个查找列表,但如果我尝试使用keyby对列表进行排序,则会获得两列。这可能非常简单,但我很困惑。代码如下....
library(data.table)
company=c("A","S","W","L","T","T","W","A","T","W")
item=c("Thingy","Thingy","Widget","Thingy","Grommit","Thingy","Grommit","Thingy","Widget","Thingy")
sales=c(120,140,160,180,200,120,140,160,180,200)
salesdt<-data.table(company,item,sales)
server <- function(input, output) {
output$theCustomersList <- renderUI({
list(
selectInput("customer", "Choose a customer:",
choices = salesdt[,unique(company), keyby=company]
,selectize=FALSE
,selected="A"
)
)
})
output$result <- renderTable(
salesdt[company%in%c(input$customer),
.(valuesold=sum(sales)), item
]
)
}
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
uiOutput("theCustomersList")
),
mainPanel(tableOutput('result'))
)
)
shinyApp(ui = ui, server = server)
澄清....我的问题是如何更改
salesdt[,unique(company), keyby=company]
获得一列但订购。
答案 0 :(得分:1)
替换
choices = salesdt[,unique(company), keyby=company]
使用
choices = sort(salesdt[,unique(company)])
或者
choices = sort(unique(salesdt$company))
或
salesdt[order(company), unique(company)]
答案 1 :(得分:1)
OP没有具体说明他希望公司名称出现在选择中的特定顺序。如果您希望按字母顺序排列公司名称(不需要为此目的使用keyby =
),Symbolix给出的答案是完美的。
您还可以按行数(最重要的是首先)订购公司名称
salesdt[, .N, by = company][order(-N), company]
[1] "W" "T" "A" "S" "L"
或按总销售量(再次,最重要的是第一次)
salesdt[, sum(sales), by = company][order(-V1), company]
[1] "W" "T" "A" "L" "S"
在这两种情况下,分两步完成:(1)使用by =
计算每个公司的指标(计数或总和),(2)根据需要对结果进行排序,但仅返回公司名称。