iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 23
3
Data Technology

你都在公司都在幹啥R? R語言資料分析經驗分享系列 第 23

【23】當老闆興奮地說:那太好了,就先來一個可以互動的表格當作示範吧!

昨天介紹了許多互動元件,也提到了input 和 output 參數的互動方式,那麼現在我們就來做一個簡單的互動資料表吧!我們選用了之前的訂單資料orders 來當範例。

Server的部分很簡單,就直接讀取orders.csv ,並指派到ouput$ordersTable。

orders = read.csv("input/orders.csv", stringsAsFactors=FALSE, fileEncoding="big5")

shinyServer(function(input, output) {
    
    output$ordersTable <- renderTable(orders)
    
})

UI 的部分也先簡單地顯示結果即可。這邊分配的寬度是3:9 。

shinyUI(fluidPage(

    fluidRow(
        column(3,
               h4("過濾")
        ),
        column(9,
               tableOutput('ordersTable')
        )
    )
    
))

然後我們會得到下列結果:

https://ithelp.ithome.com.tw/upload/images/20180109/20107299Zp066cBObH.png

再來我們要新增第一個元件sliderInput ,讓使用者可以拉動多少價錢以上的資料才顯示。

shinyUI(fluidPage(

    fluidRow(
        column(3,
               h4("過濾"),
               sliderInput('price', '價格多少以上',
                           min=0, max=12000, value=300,
                           step=100, round=0)
        ),
        column(9,
               tableOutput('ordersTable')
        )
    )
    
))

而server 這邊就載入dplyr ,然後使用filter 將結果指定到output$ordersTable 即可。

orders = read.csv("input/orders.csv", stringsAsFactors=FALSE, fileEncoding="big5")

shinyServer(function(input, output) {
    
    output$ordersTable <- renderTable({
        orders %>%
            filter(input$price < PRICE)
    })
    
})

將將!一個很基本的過濾功能就完成啦!

https://ithelp.ithome.com.tw/upload/images/20180109/20107299IhXaDKqmtc.png

再來,我們再追加下拉式選單來過濾PAYMENTTYPE,於是我們在UI 多加入selectInput 。

shinyUI(fluidPage(

    fluidRow(
        column(3,
               h4("過濾"),
               sliderInput('price', '價格多少以上',
                           min=0, max=12000, value=300,
                           step=100, round=0),
               selectInput('payment', '付款方式', c("信用卡",
                                                "ATM轉帳",
                                                "貨到付款",
                                                "現金",
                                                "無",
                                                "其他"))
        ),
        column(9,
               tableOutput('ordersTable')
        )
    )
    
))

然後在server 的地方更新filter 內容。

shinyServer(function(input, output) {
    
    output$ordersTable <- renderTable({
        orders %>%
            filter(input$price < PRICE, input$payment == PAYMENTTYPE)
    })
    
})

這樣就完成了第二個過濾功能!

https://ithelp.ithome.com.tw/upload/images/20180109/20107299rXOlB3xh4s.png

以上就是基本的input/output 與視覺元件串接,這邊應該還算簡單吧!

Ref
day23原始碼


上一篇
【22】當老闆疑惑地問:所以我可以在這個網頁調整參數,那有哪些參數可以調?
下一篇
【24】當老闆想了想問:可是有時候資料是分段處理的,這時候該怎麼使用shiny 處理呢?
系列文
你都在公司都在幹啥R? R語言資料分析經驗分享30

尚未有邦友留言

立即登入留言