2013-07-20 2 views
2

데이터 세트에 NA 두 개가있는 데이터 세트가 있습니다. 롤링 평균을 취하여 창에 NA이없는 경우 롤링 평균은 NA과 반대되는 숫자를 생성해야하지만 rollmeanrzoo 인 것으로 보이지 않습니다. 예 :누락 된 값 (누락)이있을 때 롤 만 사용

require(zoo) 
z = zoo(cbind(a=0:10, b=c(NA,10:1), c=sample(1:11,11)), 1:11) 
rollmeanr(z, k=3, fill=NA) 
    a b  c 
1 NA NA  NA 
2 NA NA  NA 
3 1 NA 3.333333 
4 2 NA 4.666667 
5 3 NA 4.000000 
6 4 NA 6.333333 
7 5 NA 7.000000 
8 6 NA 9.333333 
9 7 NA 8.333333 
10 8 NA 8.666667 
11 9 NA 5.666667 

rollapply(z, width=3, FUN=mean, by=1, by.column=TRUE, fill=NA, align="right") 
    a b  c 
1 NA NA  NA 
2 NA NA  NA 
3 1 NA 3.333333 
4 2 9 4.666667 
5 3 8 4.000000 
6 4 7 6.333333 
7 5 6 7.000000 
8 6 5 9.333333 
9 7 4 8.333333 
10 8 3 8.666667 
11 9 2 5.666667 

이 두 호출이 동일한 결과를 생성 할 것으로 기대합니다. 의견을 부탁합니다. 일부 세션 정보 :

sessionInfo() 
R version 3.0.1 (2013-05-16) 
Platform: x86_64-unknown-linux-gnu (64-bit) 

locale: 
[1] LC_CTYPE=en_US.UTF-8  LC_NUMERIC=C    
[3] LC_TIME=en_US.UTF-8  LC_COLLATE=en_US.UTF-8  
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 
[7] LC_PAPER=C     LC_NAME=C     
[9] LC_ADDRESS=C    LC_TELEPHONE=C    
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C  

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] zoo_1.7-10 

loaded via a namespace (and not attached): 
[1] grid_3.0.1  lattice_0.20-15 
+0

도움말 파일에서 '기본'롤 만 ' '에 'NA'가 포함 된 입력을 처리하지 않습니다. 그런 경우 'rollapply' 대신 사용하십시오. – dickoa

+0

예, 알았습니다. rollapply가 na.rm = TRUE를 넘겨 줄 수 있으므로 NA를 건너 뛰는 것을 허용하지 않는다고 가정했습니다. NA가있을 때 그것이 깨지면 읽어야합니까? – Alex

답변

9

'rollmean'의 기본 방법

?rollmean에서는 'NA의 포함하지 핸들 입력을 수행합니다. 이 경우 'rollapply' 을 대신 사용하십시오.

+0

예, 나는 그것을 보았습니다. rollapply가 na.rm = TRUE를 넘겨 줄 수 있으므로 NA를 건너 뛰는 것을 허용하지 않는다고 가정했습니다. NA가있을 때 그것이 깨지면 읽어야합니까? – Alex

+0

'zoo ::: rollmean.zoo'를보고'na.rm'는 어디에도 전달되지 않았습니다. – GSee

+0

예치, 그건 내가 말한 것이 아니에요. 나는'na.rm = FALSE'가 기본값이라고 생각하고'rollmean'에서 그것을 수정할 수 없습니다. 'rollapply'에서 수정할 수 있습니다. 그것이 내가 말하는 도움말 파일을 이해 한 것입니다. 분명히 나는 ​​틀렸다. – Alex

1

'partial = TRUE'옵션을 사용하십시오. 이 옵션을 사용하면 NA로 데이터를 계산할 수 있습니다.

> rollapply(z, width=3, FUN=function(x) mean(x, na.rm=TRUE), by=1, by.column=TRUE, partial=TRUE, fill=NA, align="right") 

    a b  c 
1 0.0 NaN 1.000000 
2 0.5 10.0 5.500000 
3 1.0 9.5 4.333333 
4 2.0 9.0 6.666667 
5 3.0 8.0 4.666667 
6 4.0 7.0 6.000000 
7 5.0 6.0 7.000000 
8 6.0 5.0 8.666667 
9 7.0 4.0 8.333333 
10 8.0 3.0 7.000000 
11 9.0 2.0 5.000000 

당신이 '0'으로 수정하는 첫 번째 행에서 'NaN이'을 변경하려면 '채우기 = NA'가 '= 0을 채우기'하는.

+1

또는 동등하게 :'rollapplyr (z, 3, mean, na.rm = TRUE, by = 1, partial = TRUE, fill = NA)' –

0

완료하려면 rollsum은 'NA'도 포함하는 입력을 처리 할 수 ​​없습니다. 이 경우 'rollapply'를 대신 사용하십시오.