2016-04-29 10 views
1

我有一個小應用程序,列出了客戶,項目和銷售額。我想從表中生成一個查找列表,但如果我嘗試使用keyby命令列表,將獲得兩列。這可能非常簡單,但我很困惑。下面的代碼....來自R data.table的唯一排序行單列

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

我不確定你的問題到底是什麼。也許只用'選擇=獨特(公司)'? – Jimbou

+0

該公司在data.table中引用.....在現實世界中,我導入的CSV中有40,000行,我需要從那裏獲取唯一列表。 – Martyn

+0

你在問爲什麼你會得到兩列,'salesdt [,unique(company),keyby = company]'生產2列。所以你必須改變這條線。 – Jimbou

回答

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)根據需要對結果進行排序,但僅返回公司名稱。

+0

好主意,顯示其他排序選項。 – SymbolixAU

+0

Uwe ....是的,謝謝你的其他選擇。很有幫助。 – Martyn

1

更換

choices = salesdt[,unique(company), keyby=company] 

隨着

choices = sort(salesdt[,unique(company)]) 

或者

choices = sort(unique(salesdt$company)) 

或者

salesdt[order(company), unique(company)] 
+0

謝謝.....三是我在這種情況下尋找的答案 – Martyn

+0

受你答案的啓發,我想知道三種方法中最快的是用一個更大的'data.table'。你可能會發現有趣的結果http://stackoverflow.com/questions/36953026/what-is-the-fastest-way-to-get-a-vector-of-sorted-unique-values-from-a-data- tabl – Uwe

+0

@Martyn - 在他的相關問題上看看Uwe的基準 - 如果速度是一個問題,可能會有用。 – SymbolixAU