Re: [問題] 資料整理的問題

看板R_Language作者 (cywhale)時間9年前 (2016/12/05 17:32), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串2/5 (看更多)
library(data.table) library(magrittr) library(zoo) dt <- fread('ID Day X 1 1 0.5 1 3 0.1 1 4 0.3 1 7 0.5 1 9 0.5 1 11 0.2 1 14 0.5 2 1 0.1 2 2 0.4 2 5 0.8 2 9 0.7 2 11 0.1 2 13 0.2', header=T) %>% setkey(ID, Day) dt[CJ(unique(ID), seq(min(Day), max(Day)))][,{.( Day=rollapply(Day,8,max), Mx=rollapply(X, 8, function(x) mean(x[-length(x)],na.rm=T)))}, by = .(ID)] ID Day Mx 1: 1 8 0.3500000 2: 1 9 0.3000000 3: 1 10 0.3500000 4: 1 11 0.4333333 5: 1 12 0.4000000 6: 1 13 0.4000000 7: 1 14 0.4000000 8: 2 8 0.4333333 9: 2 9 0.6000000 10: 2 10 0.7500000 11: 2 11 0.7500000 12: 2 12 0.5333333 13: 2 13 0.4000000 14: 2 14 0.3333333 ※ 引述《ppp1987 (ppp)》之銘言: : [問題類型]: : 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來) : [軟體熟悉度]: : 入門(寫過其他程式,只是對語法不熟悉) : [問題敘述]: : 資料形式 : ID Day X : 1 1 0.5 : 1 3 0.1 : 1 4 0.3 : 1 7 0.5 : 1 9 0.5 : 1 11 0.2 : 1 14 0.5 : 2 1 0.1 : 2 2 0.4 : 2 5 0.8 : 2 9 0.7 : 2 11 0.1 : 2 13 0.2 : 現在我的資料每個ID(有100多個ID)每天有一筆觀測值(但不一定每天有) : 我現在想要算每個ID當天的前七天有觀測值的平均 : 例如 : (ID=1,Day=9) Xhat=(0.5+0.3+0.1)/3 : (ID=2,Day=11) Xhat=(0.7+0.8)/2 : 現在已經用for迴圈跑出結果(但是很慢 2萬多筆約30分鐘) : 想請教各位大大有沒有比較快的方法 : 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.225.70.235 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1480930349.A.3A7.html

12/06 16:10, , 1F
已成功 感謝大大
12/06 16:10, 1F

12/07 12:25, , 2F
原來有zoo這個東西!!!
12/07 12:25, 2F
文章代碼(AID): #1OHJGjEd (R_Language)
文章代碼(AID): #1OHJGjEd (R_Language)