2012-02-07 81 views
4

我有一个数据帧,说:r选择已行交互

df <- data.frame(a=1:10,b=runif(10)) 

我想能够显示该数据帧给用户,让他们选择(单击)的行,和检索那一行

有点像edit(df),除了我想要的更简单,因为我不需要编辑功能---我只需要监听其中一行上的单击事件并获取该索引排(我甚至不需要特定的细胞!)

有谁知道我该怎么做?我宁愿使用base R或grid(为了不添加大量的软件包)这样做 - 也许我可以以某种方式将数据帧绘制在1y到nrow(df)之间的网格图形上,并使用grid.locator()功能?

这将是很好,以避免引入gui包,但如果我这样做,它应该是跨平台(linux/windows)。 gwidgets是相当不错的(虽然他们似乎没有与他们的gdf小部件很好地集成的点击事件)。

欢呼声。

+1

如果使用gWidgets,请尝试gtable,而不是gdf,因为那里的鼠标点击也会触发编辑。索引= TRUE的gtable的svalue方法将返回所选行的索引。否则,您可以使用图形设备来完成此操作,但是如果没有滚动条,您将不得不限制显示的数据框的大小。 – jverzani 2012-02-07 13:00:58

回答

7

好,这里有一个快速的方法,没有多余的包,但你可能有格式乱动,如果你想被很好地对准表,圆形的,等:如有必要

df <- data.frame(a=1:10,b=runif(10)) 
    df[menu(apply(df,1,paste,collapse=" "),graphics=TRUE),] 

设备扩大自身并在必要时自动出现滚动条。

+1

他要求的仅仅是:'menu(apply(df,1,paste,collapse =“”),graphics = TRUE)' – 2012-02-07 13:40:46

+0

oops我以为他想要的是行而不是行索引 – 2012-02-07 13:44:54

+0

然后再读一遍,我认为你的回答是合理的。 – 2012-02-07 13:46:25

0

我要建议一个空白的情节充满了addtable2plot,然后用locator选择一个点,并用组合来计算该行的Y型规格和cellheight <- max(strheight(c(column.names, row.names, as.vector(unlist(table))),...但努力在这个方向的组合似乎愚蠢的,因为@timrifle似乎已经击中了头部。