R_Language 板


LINE

- 問題: [問題類型]: 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來) [軟體熟悉度]: 入門(寫過其他程式,只是對語法不熟悉) [問題敘述]: 先附上資料檔 BK.csv 連結如右:https://goo.gl/134FUa 如連結內資料所示, Bus_No 皆為 29, Goback 皆為 1(故此二欄位可忽略) 因為我正在做的是依據 ( Stop_No., Weekend) 兩欄位對這些資料作分群, 目前已完成分群得到: 1.分群結果 grp = 1 or 2 2.各分群對應的中心點 TravelTime_center 3.各分群之資料點數 num_grp1 和 num_grp2 現在希望再進一步找出一個 乘積(設其為X), 讓這個 X 乘上 num_grp1 或 num_grp2 其中資料點較多者的 TravelTime_center X 和 TravelTime_center 相乘之後的值 -> TravelTime_refer 最終讓同一組 (Stop_No., Weekend) 的 TravelTime_refer 和 TravelTime 相減後 之值 ArrivalDiff 乘上另一組係數 B 之後最小化 ======================================================================== 即:min( ArrivalDiff * B ), 其中若 ArrivalDiff < -120 則 B = -10 ArrivalDiff 介於-120~300 則 B = 0 ArrivalDiff > 300 則 B = 2 ======================================================================== 多虧板上前輩們的指點, 已經能用 group_by pipe 作出 BK.csv 這份資料 現在碰到的問題是所求的 X 非定值, 而是要讓後面 (給定的 B 乘上 ArrivalDiff 的結果) 最小化 弄了好幾天還是弄不出想要的結果,只好上來求救,請前輩指點! [程式範例]: # 給定的(懲罰)值 B, 以下列function表示 #################################################################### B <- function( TravelTime_refer) { ifelse( TravelTime_refer < -120, -10 , { ifelse( TravelTime_refer >= -120 & TravelTime_refer =< 300, 0, 2)})} # 目標是新增兩個欄位:TravelTime_refer(參考值), Total_Penalty(懲罰值加總) # 大概的結構如下,但這邊卡住了,因為不知道怎麼寫才能讓系統自動找出一個 X 好讓 Total_Penalty 的值最小化 #################################################################### result <- BK %>% group_by( Goback, Bus_No ) %>% mutate( TravelTime_refer = X * TravelTime_center[num_grp1或num_grp2較大者] ) %>% summarise( Total_Penalty = sum( {TravelTime - TravelTime_refer}*B ) ) ======================================================================== 主要問題敘述如上, 不好意思要再勞煩板上前輩們指點了,在這邊先謝謝大家!!! *[m [環境敘述]: 請提供 sessionInfo() 的輸出結果, 裡面含有所有你使用的作業系統、R 的版本和套件版本資訊, 讓版友更容易找出錯誤 [關鍵字]: 選擇性,也許未來有用 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.113.119.164
※ 文章網址: https://webptt.com/m.aspx?n=bbs/R_Language/M.1489512085.A.641.html ※ 編輯: joson4921 (140.113.119.164), 03/15/2017 01:25:03
1F:→ cywhale: 先找出grp1,2筆數 X=ifelse(Ngrp1>Ngrp2,center1,center2 03/16 09:08
回報進度,目前做出來的部分是取出 num_grp1 和 num_grp2 比較大的那群對應中心點 BK_1 <- BK %>>% group_by( Stop_No., Weekend) %>>% summarise( num_grp1 = sum(grp==1), num_grp2 = sum(grp==2), select_TTcenter = floor( ifelse( num_grp1 > num_grp2, TravelTime_center[which(grp==1)], { ifelse( num_grp1 < num_grp2, TravelTime_center[which(grp==2)], { (TravelTime_center[which(grp==1)]+TravelTime_center[which(grp==2)])/2 }) })) ) select_TTcenter 就是根據資料點數量較多的群集中心, 以 BK 來說就是能代表大部分駕駛 從A站開到B站行駛時間的點 ===================================================================== 接著是求出 X, 這邊的 X 值是ㄧ個給定的範圍 <- seq( 0.5, 1.5, 0.05 ) 找出給定範圍內可以讓 sum( X*select_TTcenter - TravelTime)最小化的 X 利用該 X 求出 TravelTime_refer = X*select_TTcenter 為達成上述目的,想用以以下程式碼實現,但這樣子跑出來的結果都是 X= 0.5 ==================================================================== BK_2 <- BK_1 %>>% group_by( Stop_No., Weekend) %>>% mutate( TravelTime_refer = X[ which.min( sum( search_penalty1( X*select_TTcenter - TravelTime)))]*select_TTcenter ) ==================================================================== 大概是這樣,目前還在努力尋找哪裡邏輯寫錯了 ※ 編輯: joson4921 (140.113.119.164), 03/16/2017 20:44:05
2F:推 cywhale: 很難看懂問題在哪,可否把實際可以執行的資料和程式貼在 03/17 12:35
3F:→ cywhale: 同一個網站頁面上,問題用comment #指出來 要不然ppt貼文 03/17 12:37
4F:→ cywhale: 那麼長,看完後面就忘前面,程式又不能run,很難幫忙看 03/17 12:38
c大抱歉,因為不熟悉ptt暫存檔的操作,以致於上面誤貼一大堆不相干的東西, 已修正在您的推文上方,很抱歉這是我的疏失 =================================================================== 主要問題出在 mutate()裡的 X跟後面[]的部分, 已知 X <- seq( 0.5, 1.5, 0.05) 我想要找出一個 X 讓中括號裡面的部分最小化,也就是: which.min( sum( search_penalty1( X*select_TTcenter - TravelTime))) 以讓中括號內的部分最小化求出的 X值, 但到目前為止還是找不出問題所在 再次謝謝c大撥冗閱讀,謝謝您! ※ 編輯: joson4921 (1.161.174.113), 03/18/2017 00:25:17
5F:→ cywhale: 求sum(X*(只要是正數))最小值之X當然永遠是最小的X=0.5 03/18 00:57
呃...耍笨了(抱頭) 我再來想想應該要怎麼寫@@" 謝謝您 ※ 編輯: joson4921 (1.161.174.113), 03/18/2017 01:12:23







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:e-shopping站內搜尋

TOP