R弹出需要的帮助

时间:2015-12-31 10:27:34

标签: r

我有以下代码:

min_sz<-as.vector(c(unique(as.character(CF$CITY_NAME))))
min_szv <- menu(min_sz, graphics = TRUE, title="List of Cities")  

这为我提供了一个独特的城市列表作为弹出窗口。我想通过单击选择一个城市,然后它应该从数据中获取子集作为数据集。怎么办呢?

2 个答案:

答案 0 :(得分:1)

您的示例数据无法重现,因此我无法向您展示如何处理数据。我将改为使用mtcars数据集。

首先,我为该品牌添加了一个专栏:

mtcars$brand <- sapply(strsplit(row.names(mtcars), " "), getElement, 1)

现在,我创建了一个独特品牌列表,并要求用户选择一个:

brands <- unique(mtcars$brand)
choice <- menu(brands, graphics = TRUE, title  = "Choose a brand")

选择将包含所选元素的索引,因此以下内容应打印您选择的品牌:

brands[choice]

所以最后一步是从您的数据集中选择所需品牌的行:

mtcars_subset <- subset(mtcars, brand == brands[choice])

例如,如果选择"Toyota",输出将为

mtcars_subset
##                 mpg cyl  disp hp drat    wt  qsec vs am gear carb  brand
## Toyota Corolla 33.9   4  71.1 65 4.22 1.835 19.90  1  1    4    1 Toyota
## Toyota Corona  21.5   4 120.1 97 3.70 2.465 20.01  1  0    3    1 Toyota

答案 1 :(得分:0)

menu()返回与所选项对应的数字,如果没有选择则返回0。在你的情况下

cf[min_szv,]

返回您选择的子集。

包括Stibu的评论:如果您的cf中的城市名称出现不止一次,并且如果您想获得所有出现的子集,您可以使用subset()函数,例如在单列数据框架中有五个城市:

cf<-as.data.frame(c("Andover", "Barcelona", "Chicago", "Barcelona", "Bejing"))
min_sz<-as.vector(unique(c(as.character(cf[,1]))))
min_szv <- menu(min_sz, graphics = TRUE, title="List of Cities") 

subset(cf, cf[,1]==min_sz[min_szv])