2017-06-20 20 views
1

非常に広い列を含むデータテーブルがあり、スクロールバーを追加してより見やすくしたいと考えています。これまではテーブル全体にスクロールバーを使用した例がありましたが、可能ならばテーブルの各列にスクロールバーを置くことが理想的です。下に例を示します。このコードでは、私は「This_is_a_very_long_name_1」、「This_is_a_very_long_name_2」などの両方のスクロールバーをしたいR Shiny/Shinydashboard:テーブルの文字列の最後の部分を隠す

library("shinydashboard") 
library("shiny") 

body <- dashboardBody(
    fluidPage(
    column(width = 4, 
      box(
      title = "Box title", width = NULL, status = "primary", 
      div(style = 'overflow-x: scroll', tableOutput('table')) 
     ) 
    ) 
) 
) 

ui <- dashboardPage(
    dashboardHeader(title = "Column layout"), 
    dashboardSidebar(), 
    body 
) 

server <- function(input, output) { 
    test.table <- data.frame(lapply(1:8, function(x) {1:10})) 
    names(test.table) <- paste0('This_is_a_very_long_name_', 1:8) 

    output$table <- renderTable({ 
    test.table 
    }) 

} 

# Preview the UI in the console 
shinyApp(ui = ui, server = server) 

私は、8つのテーブルにテーブルを分割し、それぞれのためのスクロールテーブルを作成し、次のそれらを置くことについて考えましたお互いに、しかしそれらの間にスペースが追加され、それは素敵に見えませんでした。私はそれを1つのテーブルとして保持することが望ましいと思います(しかし、提案は大歓迎です!)。

これが可能かどうか、それを解決する方法はありますか?

ありがとうございます!

+0

列名を2行で表示しないのはなぜですか?私はスクロールが列名の良いアイデアだとは思わない –

+0

あなたの答えをありがとう! 上記のコードは、私の問題を説明するためのものです(しかし、後見ではそれをうまく捉えられないかもしれません)。私の実際の問題は、ヘッダーが広すぎるのではなく、その下のデータです(この例では、1、...、10が表示されています - これは非常に長い行/文字列です)。提案は素晴らしいですが、各行をもっと多くの行に分割すると、その時点で5つの観測結果しか表示されません)。 私の「希望」は、長い文字列の最後の部分を隠し、その列をスクロールする場合にのみ端を表示する方法です。 私はそれが理に適ったと思います。 – Dorthe

+0

あなたは何ができるか分かっています。私は自分の答えを更新します - 未来のためにあなたは質問をはっきりと書くべきです、それは列ヘッダーについてではなく、行テキストについてです。 –

答えて

0

スクロールする列ヘッダーはお勧めできませんが、あまり読みにくいとは思いません。ここでは、列が広すぎていないので、2行のヘッダを取得するために使用できるコードは次のとおりです。

library("shinydashboard") 
library("shiny") 
library(DT) 

test.table <- data.frame(lapply(1:8, function(x) {1:10})) 
names(test.table) <- paste0('This_is_a_very_long_name_', 1:8) 

body <- dashboardBody(
    fluidPage(
    column(width = 8, 
      box(
      title = "Box title", width = NULL, status = "primary", 
      div(style = 'overflow-x: scroll', dataTableOutput('table')) 
      ) 
    ) 
) 
) 

ui <- dashboardPage(
    dashboardHeader(title = "Column layout"), 
    dashboardSidebar(), 
    body 
) 

server <- function(input, output) { 

    output$table <- renderDataTable({ 
    names(test.table) <- gsub("_"," ",names(test.table)) 
    datatable(test.table, options = list(columnDefs = list(list(width = '100px', targets = c(1:8))))) 
    }) 

} 

# Preview the UI in the console 
shinyApp(ui = ui, server = server) 

[UPDATE] - > [列のテキストはここ

レンダリングが一つの解決策でありますそれはあなたのために役立ちます。

library("shinydashboard") 
library("shiny") 
library(DT) 

x <- c("aaaaaaaaaaaaaa", "bbbbbbbbbbbb", "ccccccccccc") 
y <- c("aaaaaaaaaaaaaa", "bbbbbbbbbbbb", "ccccccccccc") 
z <- c(1:3) 
data <- data.frame(x,y,z) 

body <- dashboardBody(
    fluidPage(
    column(width = 4, 
      box(
      title = "Box title", width = NULL, status = "primary", 
      div(style = 'overflow-x: scroll', dataTableOutput('table')) 
      ) 
    ) 
) 
) 

ui <- dashboardPage(
    dashboardHeader(title = "Column layout"), 
    dashboardSidebar(), 
    body 
) 

server <- function(input, output) { 

    output$table <- renderDataTable({ 
    datatable(data, options = list(columnDefs = list(list(
              targets = c(1:3), 
              render = JS(
               "function(data, type, row, meta) {", 
               "return type === 'display' && data.length > 3 ?", 
               "'<span title=\"' + data + '\">' + data.substr(0, 3) + '...</span>' : data;", 
               "}")),list(width = '100px', targets = c(1:3))))) 
    }) 

} 

# Preview the UI in the console 
shinyApp(ui = ui, server = server) 
:何のスクロールは、しかし、あなたがこの行全体の変数の名前でポップアップを取得した行の上にマウスを使用して行テキスト表示のみ最初の3つの文字(表示された文字の数を変更することができます)と ...、ありません
+0

ありがとうございました!パーフェクトです! 素晴らしい一日を! – Dorthe

関連する問題