R DT(DataTable)でフォーマットされた列をフィルタリングする方法 -- javascript フィールド と r フィールド と datatables フィールド と dt フィールド 関連 問題

How to filter (search) formatted columns in R DT (DataTable)












1
vote

問題

日本語

DT::datatable() の列にフォーマットを適用する場合、データテーブルの自動列フィルタは機能していません。例えば:

<事前> <コード> library(DT) a <- letters[1:10] b <- 1:10 df <- data.frame(a, b) datatable(df, filter="bottom") %>% formatCurrency(columns = "b", currency = "$")

列<コード> b のフィルタは失敗します。

これは解決策がなければならないという十分な問題であると思います。私は検索してきましたが、これまでに成功せずに。誰かが私を指しているならば、これが解決された場所に感謝するでしょう。

DT Webサイトの JS コールバック機能( https://rstudio.github.io/dt/options.html 4.5 Row Renderingを参照して filter="top"6 )では、でフィルタリングすることができます。 >フォーマット済み列しかし、 R パッケージの一般的なソリューションを実装しようとしているので、 R ソリューションを望んでいました。

回避策

私はいくつかの場合に働くアプローチがあります。アプローチは、レンダリングに隠された新しい列に、RAW Numbers列を新しい列にコピーすることです。しかし、 AT+CIPMUX=0 OK AT+CIPSTART="TCP","45.79.172.152",80 CONNECT OK AT+CIPSEND=74 OK > busy s... Recv 74 bytes SEND OK +IPD,493:HTTP/1.1 408 Request Timeout Date: Thu, 07 Jun 2018 16:10:59 GMT Server: Apache/2.4.25 (Debian) Content-Length: 307 Connection: close Content-Type: text/html; charset=iso-8859-1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>408 Request Timeout</title> </head><body> <h1>Request Timeout</h1> <p>Server timeout waiting for the HTTP request from the client.</p> <hr> <address>Apache/2.4.25 (Debian) Server at services.groupkt.com Port 80</address> </body></html> CLOSED 1 のraw numbers列( AT+CIPMUX=0 OK AT+CIPSTART="TCP","45.79.172.152",80 CONNECT OK AT+CIPSEND=74 OK > busy s... Recv 74 bytes SEND OK +IPD,493:HTTP/1.1 408 Request Timeout Date: Thu, 07 Jun 2018 16:10:59 GMT Server: Apache/2.4.25 (Debian) Content-Length: 307 Connection: close Content-Type: text/html; charset=iso-8859-1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>408 Request Timeout</title> </head><body> <h1>Request Timeout</h1> <p>Server timeout waiting for the HTTP request from the client.</p> <hr> <address>Apache/2.4.25 (Debian) Server at services.groupkt.com Port 80</address> </body></html> CLOSED 0 )へのフォーマットされた番号(<コード> column )を「リンク」します。それでは、幸いなことに、フォーマットの列を検索するのは正確にはまさしくありません。しかし、接尾辞の場合にのみ( 998877612 のような)が、プレフィックス( AT+CIPMUX=0 OK AT+CIPSTART="TCP","45.79.172.152",80 CONNECT OK AT+CIPSEND=74 OK > busy s... Recv 74 bytes SEND OK +IPD,493:HTTP/1.1 408 Request Timeout Date: Thu, 07 Jun 2018 16:10:59 GMT Server: Apache/2.4.25 (Debian) Content-Length: 307 Connection: close Content-Type: text/html; charset=iso-8859-1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>408 Request Timeout</title> </head><body> <h1>Request Timeout</h1> <p>Server timeout waiting for the HTTP request from the client.</p> <hr> <address>Apache/2.4.25 (Debian) Server at services.groupkt.com Port 80</address> </body></html> CLOSED 3 )または数千のコンマでの大きな数のフォーマットではありません。

各ケースのコードは以下の通りです。

この回避策を使っても構わないが、Prefixesやその他のフォーマットを作動させるためのDTの内部動作について十分にわからない。

接尾辞

<事前> <コード> AT+CIPMUX=0 OK AT+CIPSTART="TCP","45.79.172.152",80 CONNECT OK AT+CIPSEND=74 OK > busy s... Recv 74 bytes SEND OK +IPD,493:HTTP/1.1 408 Request Timeout Date: Thu, 07 Jun 2018 16:10:59 GMT Server: Apache/2.4.25 (Debian) Content-Length: 307 Connection: close Content-Type: text/html; charset=iso-8859-1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>408 Request Timeout</title> </head><body> <h1>Request Timeout</h1> <p>Server timeout waiting for the HTTP request from the client.</p> <hr> <address>Apache/2.4.25 (Debian) Server at services.groupkt.com Port 80</address> </body></html> CLOSED 4

プレフィックスが失敗する

<事前> <コード> AT+CIPMUX=0 OK AT+CIPSTART="TCP","45.79.172.152",80 CONNECT OK AT+CIPSEND=74 OK > busy s... Recv 74 bytes SEND OK +IPD,493:HTTP/1.1 408 Request Timeout Date: Thu, 07 Jun 2018 16:10:59 GMT Server: Apache/2.4.25 (Debian) Content-Length: 307 Connection: close Content-Type: text/html; charset=iso-8859-1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>408 Request Timeout</title> </head><body> <h1>Request Timeout</h1> <p>Server timeout waiting for the HTTP request from the client.</p> <hr> <address>Apache/2.4.25 (Debian) Server at services.groupkt.com Port 80</address> </body></html> CLOSED 5

大きい数が失敗する

<事前> <コード> filter="top"16
英語

When applying formatting to a column in DT::datatable(), the DataTables automatic column filter is not working. For example:

library(DT) a <- letters[1:10] b <- 1:10 df <- data.frame(a, b) datatable(df, filter="bottom") %>% formatCurrency(columns = "b", currency = "$") 

The filter for column b fails.

I think this is a common enough problem that there has to be a solution. I have been searching, but without success so far. Would be grateful if someone points me to where this has been solved.

I am aware that by using the JS callback function on the DT website (https://rstudio.github.io/DT/options.html see 4.5 Row rendering and run it with filter="top"), one can filter with formatted columns. But I am trying to implement a general solution for an R package, so I was hoping for an R solution.

Workaround

I have an approach that works in some cases. The approach is to copy the raw numbers column to a new column that is hidden on rendering. But 'link' the formatted numbers (column) to the raw numbers column (values_column) in formatStyle. Then, luckily, and not exactly sure why, searching on the formatted column works. But only in the case of suffixes (like %), but not for prefixes ($) or big number formatting with commas for thousands.

Code for each of these cases is below.

I don't mind using this workaround, but don't know enough about the inner workings of DT to make prefixes and other formats work.

Suffix works

library(DT) a <- letters[1:10] b <- 1:10 df <- data.frame(a, b)  xx <-    datatable(   data = df,   filter = "bottom",   options = list(columnDefs = list(list(     targets = which(stringr::str_detect(colnames(df), "hide")), visible = FALSE   ))) )  xx$x$data$hide_b <- xx$x$data$b xx$x$data$b <- paste(xx$x$data$b, "%") attr(xx$x, "colnames") <- colnames(xx$x$data)  xx %>%    formatStyle(     columns = "b",     valueColumns = "hide_b"   ) 

Prefix fails

library(DT) a <- letters[1:10] b <- 1:10 df <- data.frame(a, b)  xx <-    datatable(     data = df,     filter = "bottom",     options = list(columnDefs = list(list(       targets = which(stringr::str_detect(colnames(df), "hide")), visible = FALSE     )))   )  xx$x$data$hide_b <- xx$x$data$b xx$x$data$b <- paste("$", xx$x$data$b) attr(xx$x, "colnames") <- colnames(xx$x$data)  xx %>%    formatStyle(     columns = "b",     valueColumns = "hide_b"   ) 

Big number fails

library(DT) a <- letters[1:10] b <- 1:10*10^6  df <- data.frame(a, b)  xx <-    datatable(     data = df,     filter = "bottom",     options = list(columnDefs = list(list(       targets = which(stringr::str_detect(colnames(df), "hide")), visible = FALSE     )))   )  xx$x$data$hide_b <- xx$x$data$b xx$x$data$b <- format(xx$x$data$b,digits = 1, scientific = FALSE, big.mark = ",") attr(xx$x, "colnames") <- colnames(xx$x$data)  xx %>%    formatStyle(     columns = "b",     valueColumns = "hide_b"   ) 
</div
           

回答リスト

1
 
vote

DTの最新のDEV版で修正。フォーマットはもうフィルタリングを解除しません。

 

Fixed in latest dev version of DT. Formatting no longer breaks filtering.

</div
 
 
0
 
vote
vote
ベストアンサー
 

DR::renderDT を使用して、 server=TRUE (デフォルト)の(デフォルト)は、通常の DT::format* 関数を使用してこの問題を解決します。 Shiny のコンテキストでは、まだ動作しません。しかし、テーブルが光沢のあるアプリに入るので、それは私の場合には関係ありません。

 

Using DR::renderDT with server=TRUE (the default) inside a Shiny app solves this problem using the regular DT::format* functions. Outside Shiny context, the examples still don't work. But that is irrelevant in my case, as the tables will go in a Shiny app.

</div
 
 
   
   

関連する質問

0  グラフとデータ型選択の間の光沢のあるデータフレームスコープの問題  ( Dataframe scope issue in shiny between graph and datatable selection ) 
SQLクエリからデータベース可能なデータを作成し、入力$ TABLES_ROWS_SELECTED関数(DTテーブル行ビューをクリックする)を使用してグラフを更新します。 マイ問題は、作成されたテーブルが出力$ PLOTの出力によっては見られないことです。 ...

6  DT :: DataTableに合計を追加する方法  ( How to add totals to a dtdatatable ) 
データテーブルフッターに合計を追加しようとしています。さまざまなソースからのコードを使用して、私は光沢を使って次のアプリケーションを書きました。問題は、実行すると、次のメッセージが表示されます。 「処理...」 そして永遠にそこに滞在します。 私の推測はJ...

0  データテーブルDTのフォーマットスタイル  ( Formatstyle on data table dt ) 
"Show ... Entries"という用語ラベル? ありがとう ここで私が使用するコード: <事前> <コード> test.table <- data.frame(lapply(1:4, function(x) {1:50})) names(test.t...

1  読み取りXLSMファイルの行幅をShinyで修復する方法  ( How to fix row width of the read xlsm file in shiny ) 
各行の幅をどのように固定できますか。 これはコードとサンプルデータファイルの例です(>サンプルデータ)エラーを再現するには: <事前> <コード> library(shiny) library(readxl) runApp( list( ui =...

5  StyleColorBar:カラーバーのサイズは列の絶対値に比例します  ( Stylecolorbar have the size of the color bar be proportional to absolute values ) 
styleColorBar で、カラーバーのサイズを絶対値に比例するようにするにはどうすればよいですか。これとは対照的に、以下の例では、 9988777664 欄を見て、赤いバーはより大きな値で大きくなります。 コード: <事前> <コード> dat...

1  data.table :: data.tableオブジェクトでDT :: DataTableを使用できません  ( Unable to use dtdatatable on data tabledata table object ) 
私は私の光沢のあるアプリでデータベース可能なデータを作成しようとしました、次のコード: <事前> <コード> output$table <- renderDataTable({ dat }) この dat オブジェクトはdata.t...

1  ShinyでDataTableでローカルのHTMLファイルへのリンクを含める  ( Include link to local html file in datatable in shiny ) 
ローカルのHTMLファイルへのリンクを含めたい、Shiny AppのWWWディレクトリの内側に住んでいます。 On新しいタブをクリックすると、HTMLファイルが表示されていることがあります。 私はインターネットページにリンクするためのソリューションを見つけまし...

1  DT :: RenderTable()は、「一致するレコードが見つかりませんでした」と「0から0に0から0に表示(X Total Entriesからフィルタリングされます)。  ( Dtrendertable displays no matching records found and showing 0 to 0 of 0 ) 
私は、ユーザーがデータフレームの列と行を選択することができ、さらに分析のための変換方法を選択できます。 [適用]ボタンを押した後、3つのテーブルが表示されている必要があります。 RAWデータを持つテーブル 選択したRAWデータを含むテーブル 変換されたデー...

137  DataTable:[エントリの表示]ドロップダウンを非表示にしますが、検索ボックスを保持します  ( Datatable hide the show entries dropdown but keep the search box ) 
表示項目の表示を隠すことは可能ですが、検索ボックスをDataTableに保存してください。検索ボックスと一緒に下部にポジナリティで10行を表示したいが、Show Entriesドロップダウンを表示したくない。 ...

0  サブリストとR SHINYのサブの合計付き表示リスト  ( Display list with sub list and sub total in r shiny ) 
私たちがExcelのピボットテーブルで持つことができるものの種類として、r(おそらく折りたたんでいる)に表示するアイテムの上位リストとサブリストを持っています。 たとえばパッケージDTを使ってそれをする方法はありますか? 最終結果はこのように見えるべきです 項...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有