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/cn.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