看板 R_Language 關於我們 聯絡資訊
文章分類提示: - 問題: 當你想要問問題時,請使用這個類別 [問題類型]: 程式諮詢(我想用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 的版本和套件版本資訊, 讓版友更容易找出錯誤 [關鍵字]: 選擇性,也許未來有用 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.161.171.149 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1479546303.A.C7A.html
celestialgod: 第二段程式碼 完全看不懂 a <- b %>% c <- d %>% 11/19 19:03
celestialgod: 這到底是什麼語法? 11/19 19:03
QL <- quantile( type, probs=0.25) %>% QU <- quantile( type, probs=0.75) %>% 我的想法是用 quantile 函數去抓出前面 group_by 出來的每一組數據排序25%跟75%的值 用25%和75%的值當做lowerbound跟upperbound,分別指定給 QL 和 QU 再用 QL 跟 QU 去算IQR,但是不知道為什麼console一直顯示錯誤, QL 跟 QU 算不出來
celestialgod: 沒有這種與法拉qq 11/19 19:56
celestialgod: %>% 要有接函數... 你下一行又是一行assign... 11/19 19:56
celestialgod: 當然會assign 失敗 11/19 19:56
痾那我這邊應該要怎麼個打法才能跑出我想要的結果呢?..0.0 因為初始化 QL 和 QU 要根據group_by出來的結果 所以我就想說把 QL 跟 QU 的初始化擺在group_by後面 但這樣子程式會出現錯誤: >Error in quantile(type, probs = 0.25) : object 'type' not found 所以我就在QL和QU後面通通加上 %>% ,但這樣一搞就變成後面出錯了 現在處於一個不知道哪裡出問題的狀態,煩請大神指點迷津,感謝 PS.一開始我是第一段程式碼先group_by出分類結果 然後想說第二段程式碼是根據第一段的分類結果 所以我就把第二段程式碼安插在第一段的group_by跟summarize中間 我的想法是這樣,但我不知道這樣的邏輯對不對,還請不吝指正,感謝!!! ※ 編輯: joson4921 (1.161.171.149), 11/19/2016 20:11:36
celestialgod: 這個錯誤很明顯來自你的type這個變數沒有被assign 11/19 21:09
joson4921: 好的,我再去找找看怎麼解 11/19 22:04
joson4921: 感謝 11/19 22:04
cywhale: 你是想寫dt1<-type %>% mutate(QL=quantile(Time_OnStop, 11/20 00:14
cywhale: probs=0.25)) %>% mutate(QU = quantile(Time_OnStop, 11/20 00:15
cywhale: probs=0.75)) 直接在分群好的資料mutate新變數QL, QU即可 11/20 00:18
joson4921: 謝謝,用了mutate去跑並修正filter之後有跑出我要的結果 11/20 09:30
joson4921: 了,感謝兩位c大大的協助!!! 11/20 09:31