R_Language 板


LINE

※ 引述《joson4921 (特务)》之铭言: : : - 问题: 当你想要问问题时,请使用这个类别。 : : [问题类型]: : : 程式谘询(我想用R 做某件事情,但是我不知道要怎麽用R 写出来) : : [软体熟悉度]: : : 入门(写过其他程式,只是对语法不熟悉) : : [问题叙述]: : : 手边有两个资料集,分别是 data1 (预计发车时间), data2 (实际发车时间) : 我想做的事情是根据起站发车班表 data1 ,写个判断式进行时间比对 : 先上两个资料集的格式与内容示意 : data1 data2 预期结果 : Bus_No. DepartureTime DepartureTime Bus_No. : 1 5:50 2015-12-25 06:51:20 4 : 2 6:10 2015-12-26 06:53:30 4 : 3 6:30 2015-12-27 06:29:58 3 : 4 6:50 2015-12-28 05:52:32 1 : 5 7:10 2015-12-29 07:09:24 5 : 判断式的判断条件: : data1是预计发车时间,data2是实际发车时间, : 比对方式:找实际发车时间与预计发车时间差距最小者(发车前後5分钟都认定为该Bus_No.) : Bus_No.的判定结果目前是打算用dpylr加在data2的Departure栏位後面, : 最後结果输出为data3(内含 DepartureTime 和 Bus_No. 两个栏位) : 碰到的问题: : 1.卡在不同资料集的栏位资料比对 : 2.data1的Departure栏位 和 data2的Departure栏位 时间格式不一样,不知怎麽写判断式 两个格式都转成POSIXct就好,data1的年月日可以随便给一个,下面给1990/01/01 在mapping条件的时候,再把data2的年月日align data1的就好了 : 以上问题还要再麻烦各位大大解惑了@@ : : [程式范例]: : : data3 <- data2[.(这边应该是写时间判断的东西,但我想不出怎麽写), ] %>% : .[.(DepartureTime, Bus_No.)] : : [环境叙述]: : : 请提供 sessionInfo() 的输出结果, : 里面含有所有你使用的作业系统、R 的版本和套件版本资讯, : 让版友更容易找出错误 : : [关键字]: : : dplyr : 写得很丑,不过用data.table的foverlap或是non-equi joins应该会是比较简单的做法 dplyr作法就等别人补充吧~~~ 好读版:http://pastebin.com/4jZLUSLF library(data.table) # data generation numBus <- 20L departTimeSpan <- "20 mins" data1 <- data.table(busNo = 1L:numBus, departTime = seq.POSIXt(as.POSIXct("1990-01-01 05:50:00"), by = departTimeSpan, length.out = numBus)) ## data1 # busNo departTime # 1: 1 1990-01-01 05:50:00 # 2: 2 1990-01-01 06:10:00 # 3: 3 1990-01-01 06:30:00 # 4: 4 1990-01-01 06:50:00 # 5: 5 1990-01-01 07:10:00 # 6: 6 1990-01-01 07:30:00 # 7: 7 1990-01-01 07:50:00 # 8: 8 1990-01-01 08:10:00 # 9: 9 1990-01-01 08:30:00 # 10: 10 1990-01-01 08:50:00 # 11: 11 1990-01-01 09:10:00 # 12: 12 1990-01-01 09:30:00 # 13: 13 1990-01-01 09:50:00 # 14: 14 1990-01-01 10:10:00 # 15: 15 1990-01-01 10:30:00 # 16: 16 1990-01-01 10:50:00 # 17: 17 1990-01-01 11:10:00 # 18: 18 1990-01-01 11:30:00 # 19: 19 1990-01-01 11:50:00 # 20: 20 1990-01-01 12:10:00 # 产生2015/10/01~2015/12/31中前後五分钟的班次 dataCnt <- 5L data2 <- data.table(departTime = sample(data1$departTime, dataCnt, TRUE) + as.difftime(sample(9404:9495, dataCnt, TRUE), units = "days") + as.difftime(sample(-300:300, dataCnt, TRUE), units = "secs")) # departTime # 1: 2015-11-25 08:49:53 # 2: 2015-10-27 09:47:25 # 3: 2015-11-02 10:27:39 # 4: 2015-10-18 08:11:40 # 5: 2015-12-02 09:11:13 ## method 1 # find the departure time range diffTime5mins <- as.difftime(5, units = "mins") data1[ , start := departTime - diffTime5mins] data1[ , end := departTime + diffTime5mins] setkey(data1, start, end) # align time to 1990/01/01 data2[ , start := departTime - floor(departTime - as.POSIXct("1990-01-01 00:00:00"))] data2[ , end := start] # use foverlaps to find the busNo foverlaps(data2, data1)[ , .(i.departTime, busNo)] # i.departTime busNo # 1: 2015-11-25 08:49:53 10 # 2: 2015-10-27 09:47:25 13 # 3: 2015-11-02 10:27:39 15 # 4: 2015-10-18 08:11:40 8 # 5: 2015-12-02 09:11:13 11 ## method 2 # find the departure time range diffTime5mins <- as.difftime(5, units = "mins") data1[ , start := departTime - diffTime5mins] data1[ , end := departTime + diffTime5mins] setkey(data1, start, end) # align time to 1990/01/01 data2[ , departTimeAlign := departTime - floor(departTime - as.POSIXct("1990-01-01 00:00:00"))] # use Non-equi joins data2[data1, on = .(departTimeAlign >= start, departTimeAlign <= end), nomatch = 0][ , .(departTime, busNo)] # departTime busNo # 1: 2015-10-18 08:11:40 8 # 2: 2015-11-25 08:49:53 10 # 3: 2015-12-02 09:11:13 11 # 4: 2015-10-27 09:47:25 13 # 5: 2015-11-02 10:27:39 15 还有任何问题再推文吧~~~ -- R资料整理套件系列文: magrittr #1LhSWhpH (R_Language) https://goo.gl/72l1m9 data.table #1LhW7Tvj (R_Language) https://goo.gl/PZa6Ue dplyr(上.下) #1LhpJCfB,#1Lhw8b-s (R_Language) https://goo.gl/I5xX9b tidyr #1Liqls1R (R_Language) https://goo.gl/i7yzAz pipeR #1NXESRm5 (R_Language) https://goo.gl/zRUISx --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.165.234.127
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1482662080.A.3B8.html ※ 编辑: celestialgod (1.165.234.127), 12/25/2016 18:56:51
1F:推 joson4921: 有成功输出结果了,虽然试写dplyr失败但还是谢谢大大!! 12/30 12:08







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灯, 水草

请输入看板名称,例如:BuyTogether站内搜寻

TOP