2016-04-29 4 views
1

私は顧客、品目、販売をリストアップする小さなアプリを持っています。私は、テーブルから参照リストを生成したいが、私はkeybyを使用してリストを注文しようとすると2つの列を取得します。それはおそらく非常にシンプルですが、私は混乱しています。以下のコードは....Rデータからの一意のソートされた行の単一の列。

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) 

明確にするために....私の質問は、どのように私は1つのカラムをゲットする

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

を変更するが、注文したんです。

+0

あなたの問題は正確にはわかりません。おそらく 'choices = unique(company)'だけを使うでしょうか? – Jimbou

+0

会社はdata.tableで参照されています.....現実の世界では、私はインポートしているCSVに40kの行があり、そこからユニークなリストが必要です。 – Martyn

+0

なぜ、2つの列が得られるのか、 'salesdt [、unique(company)、keyby = company]'が2つの列を生成しています。ですから、この行を変更する必要があります。 – Jimbou

答えて

1

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

を交換してください営業担当者は、特定の順序で、会社名が選択肢に表示されることを指定していませんでした。アルファベット順に会社名を指定したい場合は、Symbolixの回答は完璧です(この目的でkeyby =を使用する必要はありません)。

また、(最初の最も重要な)行数によって、会社名

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" 

によってを注文することができますこれは2つのステップで行われます。(1)会社ごとのメトリック(数または合計のいずれか)をby =で計算します。(2)結果を注文しますが、会社名のみを返します。

+0

他の並べ替えオプションを表示することをお勧めします。 – SymbolixAU

+0

Uwe ....はい、他のオプションに感謝します。非常に役立ちます。 – Martyn

1

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

それとも

choices = sort(unique(salesdt$company)) 

それとも

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

ありがとう..... 3つは私がこのケースで探していた答えでした – Martyn

+0

あなたの答えに触発された、私は3つの選択肢の中で最も速いものがより大きい '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

関連する問題