2017-10-06 24 views
0

here과 같은 관측 수를 계산하는 방법을 찾고 있지만 특정 관측치 (이동 수)에 따라 기준을 변경할 수 있습니다.동적 기준을 가진 동물원 패키지의 rollapply를 사용하여 백작을 계산하십시오

예 : mag의 특정 관찰보다 큰 mag의 관찰 수 (지난 50 개)를 계산합니다. 코드는 내가 가진 :

rollapplyr(zoo(mag),50,function(i){sum(mag>i)},partial=T,by.column=F,fill=NA)) 

이 코드는 50 개 마지막 관찰의 평균 잡지를 받아 (전체 데이터 세트)이 평균보다 관찰의 수를 계산합니다.

무엇이 누락 되었습니까? 아마도 rollapply를 사용하는 것이 여기에 해당하지 않습니까? 요약 할 내용 :
1. 특정 행 값에 따라 계산하십시오.
2. 마지막 관측치 50 개 (전체 데이터 열 제외)에서만 계산하십시오.

+0

첫 번째 문제는 함수의 i'는 "윈도우"데이터와'mag',있는 그대로 '입니다 너는 전체 칼럼에서 말했다. 따라서 코드는 여러분이 위에서 말한 것과 분명히 다릅니다. 또한 샘플 데이터와 예상 출력이 없으므로 가능한 경우 추가하십시오. –

답변

2

참조하십시오 아래의 "수정"기능 :

set.seed(2017) 
mag <- sample(x = 1000, size = 20) 

## Your function, see what is printed 
# my_fun <- function(i) { 
# print(i) 
# print(mag) 
# sum(mag > i) 
# } 

## Corrected one 
my_fun <- function(i) { 
    print(i) 
    print(tail(i, 1)) 
    sum(i > tail(i, 1)) 
} 

# debug(my_fun) # Play a little with debug(), it is worth it! 

mag_out <- zoo::rollapplyr(
    # zoo::zoo(mag), 
    mag, 
    5, 
    my_fun, 
    partial = TRUE, 
    by.column = FALSE, 
    fill = NA 
) 

rbind(
    mag, 
    mag_out 
) 

출력 :

 [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16] [,17] [,18] [,19] [,20] 
mag  244 329 987 833 524 112 869 327 488 691 89 224 206 73 803 868 288 365 666 145 
mag_out 0 0 0 1 2 4 1 3 2  1  4  3  3  4  0  0  2  2  2  4 
+1

대단히 감사합니다 m-dz! R에 대한 많은 경험이 없습니다 - 제안에 따라 디버깅하는 방법을 배우려고합니다. –