作者cywhale (cywhale)
看板R_Language
标题Re: [问题] 取值:落在时间范围 并 符合其他条件
时间Fri Feb 3 00:02:48 2017
dt <- fread('Goback Bus_No. DepartureTime
0 1 5:50
0 2 6:10
0 3 6:30
0 4 6:50
0 5 7:10
1 1 6:00
1 2 6:20
1 3 6:40
1 4 7:00
1 5 7:20')
dt2 <- fread(' Departure Time Goback Bus_No.
2015-12-25 05:51:20 0 1
2015-12-26 06:53:30 0 4
2015-12-27 06:22:58 1 2
2015-12-28 05:58:32 1 1
2015-12-29 07:09:24 0 5')
setnames(dt2,3,"gobackx")
setnames(dt,2,"Bus_No")
search_near_time <- function(x, ref_dt,
tname="DepartureTime", val.name="Bus_No") {
require(data.table)
dift <- as.ITime(x) - as.ITime(unlist(ref_dt[,tname,with=F]))
return(unlist(ref_dt[which.min(abs(as.numeric(dift))),val.name,with=F],
use.names = F))
}
dt2[,near:=search_near_time(Time,
subset(dt, Goback==gobackx,
select=c("DepartureTime","Bus_No"))),
by=.(Time)]
※ 引述《joson4921 (特务)》之铭言:
:
: 文章分类提示:问题
:
: [问题类型]:
:
: 程式谘询(我想用R 做某件事情,但是我不知道要怎麽用R 写出来)
:
: [软体熟悉度]:
:
: 入门(写过其他程式,只是对语法不熟悉)
:
: [问题叙述]:
: 请简略描述你所要做的事情,或是这个程式的目的
: 板上各位大大好
: 我想请问如果 data2 跟 data1有以下2个/3个变数,例如长得像以下那样:
: data1
: Goback Bus_No. DepartureTime
: 0 1 5:50
: 0 2 6:10
: 0 3 6:30
: 0 4 6:50
: 0 5 7:10
: 1 1 6:00
: 1 2 6:20
: 1 3 6:40
: 1 4 7:00
: 1 5 7:20
: data2 预期结果"Bus_No."新增於data2内如下:
: DepartureTime Goback Bus_No.
: 2015-12-25 05:51:20 0 1
: 2015-12-26 06:53:30 0 4
: 2015-12-27 06:22:58 1 2
: 2015-12-28 05:58:32 1 1
: 2015-12-29 07:09:24 0 5
: 我想做的事情是根据data2里的 "DepartureTime" 和 "Goback" 这两个变数数,
: 去找data1里面对应的"Bus_No."传回data2,并新增一个栏位"Bus_number"储存结果
: 例: data2资料集内第四笔: 2015-12-28 05:58:32 Goback=1
: 则查找data1资料集内,
: 符合 Goback为1 且 与 DepartureTime 最接近 05:58:32者为
: Goback Bus_No. DepartureTime
: 1 1 6:00
: 故 2015-12-28 05:58:32 且 Goback=1,预期结果Bus_No.应为"1"
: 我用上次板上大大教的foverlaps函数去试着改写,
: 但弄了几天一直没办法把Goback的判断式加入,想请教大大我判断应该怎麽写才对
: data2[, foverlaps( Tmp_calculation, BusScedule_51_difftime )] %>%
: .[, Bus_No. := data1$Bus_No. ] %>%
: _________________
: ↓
: Goback的判断条件应该是加再这边,但我用中括号取值弄不出我想要的结果
: 以上,若有其他方法可用也请不吝分享
: 再麻烦请板上大大协助指点,感谢>"<
: [关键字]:
: foverlaps
: match 或者 %in% (?)
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.228.157.133
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1486051370.A.CDD.html
1F:→ cywhale: 顺道一提,data.table不知道哪一版後,DT[,"var"]就不用 02/03 09:12
2F:→ cywhale: 加with=FALSE,DT[,1:3]也不用,以前都要加很困扰..但是 02/03 09:12
3F:→ cywhale: 像我文中传变数进去还是要DT[,tname,with=F]这样设计是 02/03 09:13
4F:→ cywhale: 为了什麽?..不解.. 另外自己也有个小问题,要怎麽把变数 02/03 09:15
5F:→ cywhale: $後面,让DT$'tname' <-这样写不行,但有无写法可以work? 02/03 09:15
6F:推 joson4921: c大!!!!! 02/03 13:14
7F:→ joson4921: 虽然没有完全看懂你写的code,但我按照你写的code改成我 02/03 13:15
8F:→ joson4921: 这边对应的code并加上origin之後,终於跑出我想要的结果 02/03 13:16
9F:→ joson4921: 了,跑出结果的那刻我都快哭出来了T_T 谢谢!! 02/03 13:17
10F:→ cywhale: 不客气就是个小程式,还有看不懂处的话请问无妨.. 02/03 18:58