3

仕事用にRでカスタムGUIを構築しています.変数値に基づいてデータフレームのサブセットを選択できる部分が必要です(つまり、50を超えるすべての女性を選択するなど)。gwidgets を使用して GUI を構築していますが、このフィルターを実装する方法について行き詰っています。具体的には、ユーザーが 1 つ以上のフィルターを選択して、フィルター処理されたデータ フレームを返すことができるウィジェットを作成する方法。

これは、私が扱っているデータの小さなサンプルです。

structure(list(kunde = c(3, 3, 3, 3, 3, 3, 3, 1, 3, 3), 
               bank = c(7,98, 3, 3, 98, 2, 2, 1, 7, 2)),
          .Names = c("kunde", "bank"), row.names = c(NA, 10L), class = "data.frame")

どんな助けでも大歓迎です!!

4

2 に答える 2

2

ProgGUIinRパッケージには似たようなものの例がいくつかあります。ここにそれらの1つがあります:

library(gWidgets)
options(guiToolkit="RGtk2")
options(repos="http://streaming.stat.iastate.edu/CRAN")
d <- available.packages()       # pick a cran site

w <- gwindow("test of filter")
g <- ggroup(cont=w, horizontal=FALSE)
ed <- gedit("", cont=g)
tbl <- gtable(d, cont=g, filter.FUN="manual", expand=TRUE)

ourMatch <- function(curVal, vals) {
  grepl(curVal, vals)
}

id <- addHandlerKeystroke(ed, handler=function(h, ...) {
  vals <- tbl[, 1, drop=TRUE]
  curVal <- svalue(h$obj)
  vis <- ourMatch(curVal, vals)
  visible(tbl) <- vis
})

目的のために、因子レベルまたはレベルを使用gcheckboxgroupまたは選択して、それによってフィルター処理することができます。gcombobox重要なのは、表示されるアイテムをフィルタリングするために使用されるオブジェクトのvisible<-メソッドです。gtable

あなたがゲームなら、私のgithubサイトにあるgfilterウィジェットを試すことができます( devtoolsからも使用してください)。これはまさにあなたがやろうとしていることかもしれません。gWidgets2install_packages("gWidgets2", "jverzani")gWidgets2RGtk2

于 2012-09-07T21:53:24.177 に答える
0

データ オブジェクトと変数の 1 つをテストすると、これは の簡略化されたバージョンになりsubset.data.frameます。

tmp <- 
structure(list(kunde = c(3, 3, 3, 3, 3, 3, 3, 1, 3, 3), bank = c(7, 
98, 3, 3, 98, 2, 2, 1, 7, 2)), .Names = c("kunde", "bank"), row.names = c(NA, 
10L), class = "data.frame")

 getsub <- function(obj, logexpr) if (missing(logexpr)) {return(obj)
        } else {e <- substitute(logexpr)
         r <- eval(e, obj, parent.frame())
         if (!is.logical(r)) 
             stop("'subset' must evaluate to logical")
         r <- r & !is.na(r)
         obj[r, ] }

 getsub(tmp, bank <50)
#--------------
   kunde bank
1      3    7
3      3    3
4      3    3
6      3    2
7      3    2
8      1    1
9      3    7
10     3    2
于 2012-09-07T21:21:06.683 に答える