0
나는 데이터 프레임이 mydata을 호출하고 난 시차에 대한 롤링 평균을 추가 할 2 현재 나는 아래의 코드로 rollmedianr 사용하고 9까지 (길이가 k 인 롤 미디어를 사용할 수 있습니까?
library(data.table)
library(zoo)
library(TTR)
date = seq(as.Date("2016-01-01"),as.Date("2016-01-10"),"day")
value =c(1,2,3,4,5,6,7,8,9,10)
mydata = data.frame (date, value)
mydata
setDT(mydata)[, paste0('MED',2:9) := lapply(2:9, function(x) rollmedianr(value, x, fill = rep(NA,x-1))),][]
date value MED2 MED3 MED4 MED5 MED6 MED7 MED8 MED9
1: 2016-01-01 1 NA NA NA NA NA NA NA NA
2: 2016-01-02 2 2 NA NA NA NA NA NA NA
3: 2016-01-03 3 3 2 NA NA NA NA NA NA
4: 2016-01-04 4 4 3 3 NA NA NA NA NA
5: 2016-01-05 5 5 4 4 3 NA NA NA NA
6: 2016-01-06 6 6 5 5 4 4 NA NA NA
7: 2016-01-07 7 7 6 6 5 5 4 NA NA
8: 2016-01-08 8 8 7 7 6 6 5 5 NA
9: 2016-01-09 9 9 8 8 7 7 6 6 5
10: 2016-01-10 10 2 9 3 8 4 7 5 6
그러나 rollmedianr의 설명에) 함수 "k"는 홀수 여야 결과가 잘못됩니다. 4 열의 MED4는 "3"을 표시하지만 중앙값 (c (1,2,3,4))의 중앙값은 2.5이어야합니다. 나는 짝수 및 홀수 "k"에 대한 적절한 롤링 중간 값을 계산하고 싶습니다.
나는이 작업을 거라고 생각 :setDT(mydata)[, paste0('Calc',2:9) := lapply(2:9, function(x) rollapply(value,x,FUN="median",align="left"))][]
그러나 당신이 아래 볼 수는 올바르지 않습니다. "Calc2"는 NA, 1.5,2 등이어야합니다. ......
date value Calc2 Calc3 Calc4 Calc5 Calc6 Calc7 Calc8 Calc9
1: 2016-01-01 1 1.5 2 2.5 3 3.5 4 4.5 5
2: 2016-01-02 2 2.5 3 3.5 4 4.5 5 5.5 6
3: 2016-01-03 3 3.5 4 4.5 5 5.5 6 6.5 5
4: 2016-01-04 4 4.5 5 5.5 6 6.5 7 4.5 6
5: 2016-01-05 5 5.5 6 6.5 7 7.5 4 5.5 5
6: 2016-01-06 6 6.5 7 7.5 8 3.5 5 6.5 6
7: 2016-01-07 7 7.5 8 8.5 3 4.5 6 4.5 5
8: 2016-01-08 8 8.5 9 2.5 4 5.5 7 5.5 6
9: 2016-01-09 9 9.5 2 3.5 5 6.5 4 6.5 5
10: 2016-01-10 10 1.5 3 4.5 6 7.5 5 4.5 6
Warning messages:
1: In `[.data.table`(setDT(mydata), , `:=`(paste0("Calc", 2:9), lapply(2:9, :
Supplied 9 items to be assigned to 10 items of column 'Calc2' (recycled leaving remainder of 1 items).
2: In `[.data.table`(setDT(mydata), , `:=`(paste0("Calc", 2:9), lapply(2:9, :
Supplied 8 items to be assigned to 10 items of column 'Calc3' (recycled leaving remainder of 2 items).
3: In `[.data.table`(setDT(mydata), , `:=`(paste0("Calc", 2:9), lapply(2:9, :
Supplied 7 items to be assigned to 10 items of column 'Calc4' (recycled leaving remainder of 3 items).
4: In `[.data.table`(setDT(mydata), , `:=`(paste0("Calc", 2:9), lapply(2:9, :
Supplied 6 items to be assigned to 10 items of column 'Calc5' (recycled leaving remainder of 4 items).
5: In `[.data.table`(setDT(mydata), , `:=`(paste0("Calc", 2:9), lapply(2:9, :
Supplied 4 items to be assigned to 10 items of column 'Calc7' (recycled leaving remainder of 2 items).
6: In `[.data.table`(setDT(mydata), , `:=`(paste0("Calc", 2:9), lapply(2:9, :
Supplied 3 items to be assigned to 10 items of column 'Calc8' (recycled leaving remainder of 1 items).
어떤 생각? 고맙습니다.