Re: [問題] 取值:落在時間範圍 並 符合其他條件

看板R_Language作者 (cywhale)時間7年前 (2017/02/03 00:02), 編輯推噓1(109)
留言10則, 2人參與, 最新討論串2/2 (看更多)
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

02/03 09:12, , 1F
順道一提,data.table不知道哪一版後,DT[,"var"]就不用
02/03 09:12, 1F

02/03 09:12, , 2F
加with=FALSE,DT[,1:3]也不用,以前都要加很困擾..但是
02/03 09:12, 2F

02/03 09:13, , 3F
像我文中傳變數進去還是要DT[,tname,with=F]這樣設計是
02/03 09:13, 3F

02/03 09:15, , 4F
為了什麼?..不解.. 另外自己也有個小問題,要怎麼把變數
02/03 09:15, 4F

02/03 09:15, , 5F
$後面,讓DT$'tname' <-這樣寫不行,但有無寫法可以work?
02/03 09:15, 5F

02/03 13:14, , 6F
c大!!!!!
02/03 13:14, 6F

02/03 13:15, , 7F
雖然沒有完全看懂你寫的code,但我按照你寫的code改成我
02/03 13:15, 7F

02/03 13:16, , 8F
這邊對應的code並加上origin之後,終於跑出我想要的結果
02/03 13:16, 8F

02/03 13:17, , 9F
了,跑出結果的那刻我都快哭出來了T_T 謝謝!!
02/03 13:17, 9F

02/03 18:58, , 10F
不客氣就是個小程式,還有看不懂處的話請問無妨..
02/03 18:58, 10F
文章代碼(AID): #1OarWgpT (R_Language)
文章代碼(AID): #1OarWgpT (R_Language)