看板 R_Language 關於我們 聯絡資訊
※ 引述《joson4921 (特務)》之銘言: : : - 問題: 當你想要問問題時,請使用這個類別。 : : [問題類型]: : : 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來) : : [軟體熟悉度]: : : 入門(寫過其他程式,只是對語法不熟悉) : : [問題敘述]: : 請簡略描述你所要做的事情,或是這個程式的目的 : 手邊有資料 df 如下: : Goback Toward TravelTime UniqueID : 1 A1 32 AA01 : 1 A2 47 AA01 : 1 A3 83 AA01 : 1 A4 122 AA01 : 1 A5 143 AA01 : 0 B1 284 BB01 : 0 B2 302 BB01 : 0 B3 419 BB01 : 0 B4 492 BB01 : 0 B5 701 BB01 : 0 B1 104 BB02 : 0 B2 231 BB02 : 0 B3 245 BB02 : 0 B4 268 BB02 : 0 B5 313 BB02 : 1 A1 31 AA02 : 1 A2 83 AA02 : 1 A3 172 AA02 : 1 A4 198 AA02 : 1 A5 276 AA02 : 希望用同一 UniqueID 欄位的五筆資料,算出他們之間 TravelTime 的時間差(秒數) : 並新增 TT_diff 欄位容納其結果,但這邊有個問題 : 因為 5筆 TravelTime資料只能產出 4個 時間差(秒數) : 以 UniqueID == AA02 為例,產出之TT_diff欄位結果如下 : (第一筆 TT_diff = 83-31 = 52, 以此類推) : TT_diff : 52 : 89 : 26 : 78 : 但我希望產出的結果能夠長得像這樣 : 也用 UniqueID == AA02 的第一筆資料(TravelTime = 31)塞進去 TT_diff 欄位 : 後面再接上面產出的4個時間差,像下面這樣: : TT_diff(我想要的結果) : 31 : 52 : 89 : 26 : 78 : 因為之前用 [, := ] 跑運算(好像是magrittr?)沒有跑過這種同時設定兩種條件的 : 用別的方法試了兩天,弄不出我想要的結果, : 如底下程式碼所示,那個31沒辦法出現在第一列.而且最後一列會出現NA : 請問板上大大,如果要產出上面我想要的結果,程式碼該怎麼修正,謝謝!! : [程式範例]: : : <我的程式碼> : result <- df[ , .(TT_diff = TravelTime[2L:5L]-TravelTime[1L:4L] ), : by=.(UniqueID)] : TT_diff(跑出來的結果,跟想要的差很多) : 52 : 89 : 26 : 78 : NA : : [環境敘述]: : : : [關鍵字]: : : 選擇性,也許未來有用 : 我的做法,參考看看: library(data.table) library(dplyr) library(magrittr) dt <- fread( "Goback Toward TravelTime UniqueID 0 B1 104 BB02 0 B2 231 BB02 0 B3 245 BB02 0 B4 268 BB02 0 B5 313 BB02 1 A1 31 AA02 1 A2 83 AA02 1 A3 172 AA02 1 A4 198 AA02 1 A5 276 AA02 " ) %>% tbl_df() dt %>% group_by(UniqueID) %>% mutate(seq = order(Toward), lagTime = lag(TravelTime)) %>% ungroup() %>% mutate(TT_diff = TravelTime - lagTime) %>% mutate(TT_diff = ifelse(seq == 1, TravelTime, TT_diff)) %>% select(-seq, -lagTime) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.160.116.220 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1502631367.A.0DF.html