文章分类提示:
- 问题: 当你想要问问题时,请使用这个类别
[问题类型]:
程式咨询(我想用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 的版本和套件版本资讯,
让版友更容易找出错误
[关键字]:
选择性,也许未来有用
作者:
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即可