[問題] 如何將前n小時資料另存一個欄位

看板R_Language作者 (understand?)時間1年前 (2022/07/21 11:17), 1年前編輯推噓6(608)
留言14則, 6人參與, 1年前最新討論串1/1
[問題類型]: 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來) [軟體熟悉度]: 請把以下不需要的部份刪除 新手(沒寫過程式,R 是我的第一次) [問題敘述]: 我有一組data.table數據,格式如下, 我想新增1個欄位RH03,擺放RH值前3小時的數據, 我用dplyr 的 mutate 但出現錯誤訊息,請問要如何修正? Data %>% mutate("RH03" =RH[-3]) Date hour RH 2022-07-01 1 71 2022-07-01 2 72 2022-07-01 3 77 2022-07-01 4 78 2022-07-01 5 83 2022-07-01 6 NA 2022-07-01 7 78 2022-07-01 8 70 2022-07-01 9 65 2022-07-01 10 60 2022-07-01 11 58 2022-07-01 12 55 2022-07-01 13 57 2022-07-01 14 58 2022-07-01 15 61 2022-07-01 16 79 2022-07-01 17 73 2022-07-01 18 66 2022-07-01 19 65 2022-07-01 20 72 2022-07-01 21 74 2022-07-01 22 74 2022-07-01 23 78 2022-07-01 24 81 [程式範例]: [環境敘述]: 請提供 sessionInfo() 的輸出結果, 裡面含有所有你使用的作業系統、R 的版本和套件版本資訊, 讓版友更容易找出錯誤 [關鍵字]: 選擇性,也許未來有用 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 27.53.239.93 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1658373430.A.912.html ※ 編輯: studioA (27.53.239.93 臺灣), 07/21/2022 11:24:00 ※ 編輯: studioA (27.53.239.93 臺灣), 07/21/2022 11:26:00

07/21 11:42, 1年前 , 1F
可以用lag(RH, n=3L)來取得位移後的資料,反之用lead
07/21 11:42, 1F

07/21 19:56, 1年前 , 2F
若不能保證每小時都有RH、資料集有排序,建議是前兩欄轉
07/21 19:56, 2F

07/21 19:56, 1年前 , 3F
成時間格式>>判斷3小時是否資料>>新欄位賦予
07/21 19:56, 3F

07/22 01:10, 1年前 , 4F
Data[, tmp := hour - 3]
07/22 01:10, 4F

07/22 01:13, 1年前 , 5F
merge(Data[, -"tmp"], Data[, -"hour"], by.x = "hour",
07/22 01:13, 5F

07/22 01:13, 1年前 , 6F
by.y = "tmp", all = T)
07/22 01:13, 6F

07/22 01:14, 1年前 , 7F
然後再清理一下表格移除不需要的NA就好了
07/22 01:14, 7F

07/22 02:30, 1年前 , 8F
用ifelse就可以了,不過如果不是前3小時要擺多少,0嗎?
07/22 02:30, 8F

07/22 02:31, 1年前 , 9F
Data %>% mutate(RH03 = ifelse(hour <= 3, RH, 0))
07/22 02:31, 9F

07/22 02:32, 1年前 , 10F
NA就Data %>% mutate(RH03 = ifelse(hour <= 3, RH, NA))
07/22 02:32, 10F

07/22 03:00, 1年前 , 11F
data.table的話 df[, RH03 := shift(RH, 3L, 0, "lag")]
07/22 03:00, 11F

07/22 03:00, 1年前 , 12F
如果前3個小時不填0而是NA,就把0改成NA即可
07/22 03:00, 12F

07/22 03:11, 1年前 , 13F

07/22 11:56, 1年前 , 14F
感謝解答疑惑
07/22 11:56, 14F
文章代碼(AID): #1YsCKsaI (R_Language)
文章代碼(AID): #1YsCKsaI (R_Language)