作者clansoda (小笨)
看板R_Language
标题[问题] 筛选问题
时间Fri Nov 25 12:34:53 2016
各位好,我不知道这个命题怎麽写但是它是关於筛选的问题
假如我有三个可筛选的向量
A 是 空白 老鼠 老虎
B 是 空白 小时候 长大
C 是 空白 卵生 胎生
我要做的是 假如A是空白 B也是空白 那就只筛
dat[c == 使用者输入的值] 这样
假如只有B是空白 那就变成
dat[A == 使用者输入 & C == 使用者输入]
不知道我这样解释会不会不太清楚
就跟一般网页的用法一样,空白的就忽略它
但是我写不出类似的感觉,只能用很多if来包装
我觉得这样程式会很复杂,所以来请教
dat[A & B & C] 是我最想一次写完的方式可是
B如果是空白的话,就会导致整个data都没办法出来
想请问有什麽更好的方法可以写这个筛选呢
前提是一定要有空白这个,因为如果不加空白这个选项
预设就会是老虎或老鼠其中一个,可是假如使用者不想筛的话
会没办法使用,因为A一定会是老虎或老鼠其中一个而不是两种都呈现
------------------------------
C大我在解释一下,假如我有以下这个dataframe
食性 生育方式 生活地区
1 肉食 胎生 水生
2 草食 胎生 陆生
3 肉食 卵生 水生
4 杂食 胎生 两栖
5 草食 胎生 两栖
假如使用者让 食性 生育方式 生活地区三者皆留白则呈现的就是上面这个表格
如果使用者这时候去拉了第一个select bar让食性 == 肉食
那这时候只会剩下第一跟第三个row
他又去动了第二个select bar 让生育方式 == 胎生
则只会留下第一个row
我目前是已经想出来大概的做法,只剩下最後一步我还在google
如果有大大能提示我怎麽做最理想不过了
这是我目前的作法
食性 <- ifelse(食性== "","","食性 == input$食性")
生育方式 <-ifelse(生育方式 == "","","生育方式 == input$生育方式")
生活地区 <-ifelse(生活地区 == "","","生活地区 == input$生活地区")
if (食性 == "" & 生育方式 == "" & 生活地区 == "") {
return(dat) } else {
picachu <- c(食性,生育方式,生活地区) %>% .[.! = ""] %>% paste(collapse = "&")
dat[picachu] %>% return
}
上面的是我的作法,缺的这一步就是data.table不接受character在他的argument里头
上面的就会变成dat["食性 == 肉食 & 生育方式 == 胎生"]
多了那两个quote,请问有其他方法可以解决这整个问题或者是上面这个quote问题吗?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.172.86.77
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1480048497.A.812.html
1F:→ cywhale: 看不太懂,如果使用者输入A=老鼠, 那得到的答案是什麽呢? 11/25 14:20
2F:推 cywhale: 如果使用者输入A=c(老鼠, 老虎),得到的答案又是什麽? 11/25 14:21
※ 编辑: clansoda (1.172.86.77), 11/25/2016 15:00:42
3F:→ clansoda: 我自己回自己 最後一行写成 dat[parse(text = picachu) 11/25 15:18
4F:→ clansoda: %>% eval] 就可以达成把character pass进去的作用了 11/25 15:18
5F:→ andrew43: 感觉最终是想做成类似试算表软体在栏头的自动筛选功能? 11/25 17:17
6F:→ clansoda: 试算表是excel吗? 我不太清楚excel有甚麽功能耶 11/25 17:43
7F:→ clansoda: 我觉得有点像是股票那种拉来拉去的感觉 11/25 17:44