我有以下代码:
min_sz<-as.vector(c(unique(as.character(CF$CITY_NAME))))
min_szv <- menu(min_sz, graphics = TRUE, title="List of Cities")
这为我提供了一个独特的城市列表作为弹出窗口。我想通过单击选择一个城市,然后它应该从数据中获取子集作为数据集。怎么办呢?
答案 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])