サイドバー メニューを使用して条件の任意のリストによってデータフレームをフィルター処理できるようにする、Shiny アプリで使用する一般的な関数を作成しようとしています。そのため、サイドバー メニューを使用して、フィルタリングする列とフィルタリングする条件の両方を選択できます。
これは、mtcars データセットを使用して、現在私の目的のために機能する、作成した Rmd の再現可能な例を縮小したものです。
https://github.com/keithmcnulty/flexfiltering/blob/master/index.Rmd
非標準評価では、列名を値とは異なる方法で処理する必要があるため、使用して構築された関数filter1_by
、などを参照してください。これにより、必要なフィルターの数に応じて、いくつかの関数を作成する必要がありました。例えば:filter2_by
dplyr::filter_at
filter2_by <- function(df, f1, fv1, f2, fv2) {
filter_f1 <- quo(f1)
filter_f2 <- quo(f2)
df %>%
dplyr::filter_at(vars(!!filter_f1), all_vars(. == fv1)) %>%
dplyr::filter_at(vars(!!filter_f2), all_vars(. == fv2))
}
私が本当にやりたいことはfilter_by(df, ...)
、任意のフィルター条件のセットを受け入れる単一の関数を作成することです。次に例を示します。
filter_by(mtcars, input$filter1 == input$filter1val,
input$filter2 == input$filter2val)
コーディング方法についてアドバイスをいただければ幸いですfilter_by
。
ありがとう!