2017-11-08 10 views
0

フィルタが有効なデータテーブルがあり、このデータテーブルから選択した行を読み込みたいとします。フィルタオプションを使用してデータテーブルから行を選択する:RShiny

入力$ table_rows_selectedはフィルタが適用されない場合はうまく動作しますが、データにフィルタを適用すると正しいrowindexは返されません。

ui <- function(id) { 
    fluidPage(
    title = "Job Tracker", 

    fluidRow(
     column(width=6, 
      selectInput("pickvalue", label = "Pick a Value", choices = unique(iris$Species)) 
    ) 
    ), 

    br(), 
    fluidRow(
     column(12, 
      DT::dataTableOutput("job_data") 

    ) 

    ), 
    br(), 
    fluidRow(
     column(12,DT::dataTableOutput("x4")) 
    ) 
) 

} 

server <- function(input, output, session) 
{ 
     output$job_data <- DT::renderDataTable({ 
     datatable(iris[iris$Species==input$pickvalue,],selection = "single") 
     }) 

    output$x4 <- DT::renderDataTable({ 
     s <- input$job_data_rows_selected 
     datatable(iris[s,]) 
    }) 

} 

答えて

1

以前に選択された行のインデックスを返すために、あなたは、インデックス= 4を選択して、データを切り替えるので、もしあなたがそうのような指標を追跡するために、いくつかのreactiveValuesを追加することができ、インデックス= 4、インデックスはデータの対象となることに注意してください

library(shiny) 
library(DT) 
ui <- function(id) { 
    fluidPage(
    title = "Job Tracker", 

    fluidRow(
     column(width=6, 
      selectInput("pickvalue", label = "Pick a Value", choices = unique(iris$Species)) 
    ) 
    ), 

    br(), 
    fluidRow(
     column(12, 
      DT::dataTableOutput("job_data") 

    ) 

    ), 
    br(), 
    fluidRow(
     column(12,DT::dataTableOutput("x4")) 
    ) 
) 

} 

server <- function(input, output, session){ 
    v <- reactiveValues() 
    v$s <- NULL 

    data <- reactive({ 
    iris[iris$Species==input$pickvalue,] 
    }) 

    output$job_data <- DT::renderDataTable({ 
    datatable(data(),selection = "single") 
    }) 

    observe({ 
    if(!is.null(input$job_data_rows_selected)){ 
     v$s <- input$job_data_rows_selected 
    } 
    }) 

    output$x4 <- DT::renderDataTable({ 
    datatable(data()[v$s,]) 
    }) 
} 
shinyApp(ui, server) 

enter image description here

あなたは正しくインデックスを維持したい場合は、削除rownames:

新しいデータに適用されます
+0

ありがとうございます。私の問題は、私が種を変えた後、どの列を選択するかということです。 rowindex number 15が選択されていますが、rows_selectedは実際の行インデックスではなくrowのorder numberを返します。つまり、選択された行が上から4行目の場合、15ではなく4を返します。 –

+0

編集を見て、rownamesをnullにします。 –

+0

本当に助けてくれてありがとう。 –

関連する問題