[問題] 對group_by後的資料使用filter過濾

作者: joson4921 (特務)   2016-11-19 17:04:57
文章分類提示:
- 問題: 當你想要問問題時,請使用這個類別
[問題類型]:
程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來)
[軟體熟悉度]:
*[m
入門(寫過其他程式,只是對語法不熟悉)
[問題敘述]:
手上有一組資料叫作OnStop_TT(csv檔:https://goo.gl/uneVoZ)
想選取其中的Time_frame(5-22時)/Goback(去&返程)/NameZh(單程25站)等三個欄位
以group_by作分類,分類結果為
符合對應Time_frame/Goback/NameZh底下皆有數十筆不等之Time_OnStop(停靠時間)
再以summarise取出停靠時間最小值,然後用arrange依Time_OnStop大小排序輸出
以下程式碼參考網路上有的並加以修改如下:
===============================================================
#初始化 type 儲存分類後的 OnStop_TT 資料
type <- OnStop_TT %>%
#選取Time_frame, Goback, NameZh等三欄位作為分類數據的依據
group_by(Time_frame,Goback,NameZh) %>%
summarise(Time_OnStop = min(Time_OnStop)) %>%
arrange(desc(Time_OnStop))
===============================================================
到這邊為止都OK也能跑出我要的結果.
但我想做的是在summarise取最小值之前,先行排除停靠時間過小的資料:
→比「盒鬚法下緣(令此數為 QL )減1.5倍 IQR」還要小的資料視為異常值刪除
之後再對每一組分類結果底下的停靠時間資料作處理:
因為不會寫所以copy網路上找到的程式碼並修改如下:
===============================================================
#初始化盒鬚法上下緣分別為 QU 和QL, IQR值為QU-QL
QL <- quantile( type, probs=0.25) %>%
QU <- quantile( type, probs=0.75) %>%
QU_QL <- QU-QL %>%
QL %>%
QU %>%
QU_QL %>%
#鎖定小於下四分位數的數值( Time_OnStop < QL-1.5*IQR 的資料視為異常值)
which(type < QL-1.5*QU_QL) %>%
type[which(type < QL-1.5*QU_QL)] %>%
#移除小於 下緣QL減去1.5倍IQR 的資料列
#然後取最小值
filter( type, Time_OnStop < (QL-1.5*QU_QL)) %>%
summarise(Time_OnStop = min(Time_OnStop)) %>%
arrange(desc(Time_OnStop))
===============================================================
錯誤代碼,疑似QU沒有成功初始化:Error: object 'QU' not found
弄了快一星期還是找不到問題出在哪,請求板上大神協助
感謝大家
[環境敘述]:
請提供 sessionInfo() 的輸出結果,
裡面含有所有你使用的作業系統、R 的版本和套件版本資訊,
讓版友更容易找出錯誤
[關鍵字]:
選擇性,也許未來有用
作者: celestialgod (天)   2016-11-19 19:03:00
第二段程式碼 完全看不懂 a <- b %>% c <- d %>%這到底是什麼語法?沒有這種與法拉qq%>% 要有接函數... 你下一行又是一行assign...當然會assign 失敗這個錯誤很明顯來自你的type這個變數沒有被assign
作者: joson4921 (特務)   2016-11-19 22:04:00
好的,我再去找找看怎麼解感謝
作者: cywhale (cywhale)   2016-11-20 00:14:00
你是想寫dt1<-type %>% mutate(QL=quantile(Time_OnStop,probs=0.25)) %>% mutate(QU = quantile(Time_OnStop,probs=0.75)) 直接在分群好的資料mutate新變數QL, QU即可
作者: joson4921 (特務)   2016-11-20 09:30:00
謝謝,用了mutate去跑並修正filter之後有跑出我要的結果了,感謝兩位c大大的協助!!!

Links booklink

Contact Us: admin [ a t ] ucptt.com