作者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://www.ptt.cc/bbs/R_Language/M.1486051370.A.CDD.html
→ cywhale: 順道一提,data.table不知道哪一版後,DT[,"var"]就不用 02/03 09:12
→ cywhale: 加with=FALSE,DT[,1:3]也不用,以前都要加很困擾..但是 02/03 09:12
→ cywhale: 像我文中傳變數進去還是要DT[,tname,with=F]這樣設計是 02/03 09:13
→ cywhale: 為了什麼?..不解.. 另外自己也有個小問題,要怎麼把變數 02/03 09:15
→ cywhale: $後面,讓DT$'tname' <-這樣寫不行,但有無寫法可以work? 02/03 09:15
推 joson4921: c大!!!!! 02/03 13:14
→ joson4921: 雖然沒有完全看懂你寫的code,但我按照你寫的code改成我 02/03 13:15
→ joson4921: 這邊對應的code並加上origin之後,終於跑出我想要的結果 02/03 13:16
→ joson4921: 了,跑出結果的那刻我都快哭出來了T_T 謝謝!! 02/03 13:17
→ cywhale: 不客氣就是個小程式,還有看不懂處的話請問無妨.. 02/03 18:58