Re: [問題] grep判斷欄位是否含特定字串,取該筆資料

作者: andrew43 (討厭有好心推文後刪文者)   2016-12-16 23:50:04
我舉一個很簡單的例子
library(dplyr)
data(CO2)
CO2 %>% .[grep("^Qn[12]$", .$Plant), ]
你希望用 filter() 來做,但它不適合吃 grep() 回傳資料。
※ 引述《joson4921 (特務)》之銘言:
:
: 文章分類提示:
: - 問題: 當你想要問問題時,請使用這個類別。
:
: [問題類型]:
:
: 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來)
:
: [軟體熟悉度]:
: 請把以下不需要的部份刪除
: 新手(沒寫過程式,R 是我的第一次)
:
: [問題敘述]:
: 請簡略描述你所要做的事情,或是這個程式的目的
: Data含有資料如下所示:
: Time UniqueBusID
: 1 12:00:30 273-FC_o 大東紡織(振興路)->屯區藝文中心162
: 2 14:45:54 273-FC_o 大東紡織(振興路)->屯區藝文中心162
: 3 15:53:47 273-FC_o 屯區藝文中心->莒光新城163
: 4 17:17:56 285-FC_o 下太平->莒光新城164
: 5 15:46:12 285-FC_o 莒光新城->莒光新城163
: 我想做的是將UniqueBusID內含有"屯區藝文中心->","莒光新城->"兩字串的資料列取出
: 具體做法是先使用檢測用的函數檢測UniqueBusID是否含有該二字串,
: 爬文之後選用grep來做檢測,檢測之後再用filter將通過grep檢測的資料列留下
: 但我發現使用filter()不能直接在括號內放進grep那一串,改用mutate也一樣不行
: 請問板上大大這中間是不是我想錯了什麼導致我無法取出我要的結果呢?
: PS.結果應僅剩下第3和第5資料列
: 先感謝板大撥冗解惑
: [程式範例]:
:
: filter(grep("莒光新城->\\d*|屯區藝文中心->\\d*",
: BusData_51$UniqueBusID, value = T))
: filter)
: [環境敘述]:
:
: [關鍵字]:
: grep, filter, mutate
:
: 選擇性,也許未來有用
:
作者: celestialgod (天)   2016-12-17 00:02:00
grepl + filter
作者: joson4921 (特務)   2016-12-17 00:12:00
c大那一系列文看了很多遍,但是有些眉角還是不太曉得怎麼用,andrew大剛剛的寫法我針對自己的需求做了修改,終於跑出我要的結果了,來去原篇把更正的結果發上來,謝謝R板的大大們熱心協助
作者: andrew43 (討厭有好心推文後刪文者)   2016-12-17 00:37:00
如C板主說的,如果要用filter,用CO2 %>% filter(., grepl("^Qn[12]$", .$Plant)) 即可重點是 filter() 要餵食TRUE/FALSE
作者: joson4921 (特務)   2016-12-17 16:12:00
原來是這樣...剛剛分別試過兩種方法,再好好琢磨琢磨

Links booklink

Contact Us: admin [ a t ] ucptt.com