GUI到子集的数据帧中的R
我建立一个自定义的GUI中的R为工作,我需要有能够选择基于可变值的数据帧的子集的一部分(即,选择高于50所有女性等等。)。我建立与gwidgets的GUI,但我坚持关于这个过滤器是如何实现的。具体如何创建一个小部件,允许用户选择一个或多个过滤器,然后返回过滤的数据帧。GUI到子集的数据帧中的R
下面是从数据的小样本我一起工作:
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")
任何帮助是极大的赞赏!
里有ProgGUIinR
包类似的事情的一些例子。这里是其中的一个:
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
选择因子水平或由级别和筛选器。关键是gtable
对象的visible<-
方法用于过滤显示项。
如果你是游戏,你可以尝试在gWidgets2
其中之为知的就是在我的github的网站(使用install_packages("gWidgets2", "jverzani")
从devtools,也gWidgets2RGtk2
)的gfilter
部件。这可能正是你想要做的。
感谢您的代码示例和参考! –
与您的数据对象和测试变量之一,这是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
感谢您的代码,但如何将你gwidgets实现这一点? –
???当你的数据对象没有这样的价值时,你如何计划在“女性”上进行子集划分? –
性别变量是在数据中,但我只是用它作为这个问题的例子。我想象任何示例都可以很容易地通过过滤给定的性别变量; –
您可能希望考虑将GUI嵌入到更大的框架(如Deducer或R Commander)中。您将免费获得一些这些数据处理任务。 (例如http://www.deducer.org/pmwiki/pmwiki.php?n=Main.Subset) –