2017-12-05 5 views
0

때 그룹에 의해 평균 압연 평가하기 것은 데이터 집합 수단 -이 그룹은 내가 압연의 무리를 계산하기 위해 노력하고 부족한 관찰

 date name px_last 
2012-12-04 A 6.81 
2012-12-05 A 4.28 
2012-12-06 A 4.32 
2012-12-04 A 6.89 
2012-12-05 A 7.24  
2012-12-04 B 6.81 
2012-12-05 B 9.38 
2012-12-06 B 3.62 
2012-12-04 C 3.85 
2012-12-05 C 4.23 
2012-12-06 C 7.32 
2012-12-04 C 2.84 
2012-12-05 C 8.38 

(가) 내가 사용하고있는 코드입니다 -

vec = c(2, 3, 4, 5) 
for(i in c(1:length(vec))){ 
    varname = paste0("ma", vec[i]) 
    df = df %>% group_by(name) %>% mutate(!!varname := rollapplyr(px_last, vec[i], mean, na.rm = TRUE, fill = "NA")) 
} 

나는 세 번째 반복에서 얻을 오류 것은 -이 게시물에서

Error in mutate_impl(.data, dots) : 
Evaluation error: wrong sign in 'by' argument. 

-Clueless about this error: wrong sign in 'by' argument - 나는 underst 일부 그룹은 행 수가 충분하지 않기 때문에 발생합니다. 이 예에서 그룹은 name = B

어떻게 관찰 할 수 있습니까? 관찰이 불충분 한 그룹을 삭제하지 않고 평균을 계산하는 방법은 무엇입니까? 나는 바람직하지 않은 관측으로 평균을 계산할 수없는 곳에서 바람직하게는 NA를 원한다.

+0

'memb_hist %> % group_by() ...'에서'memb_hist' 란 무엇입니까? – ANG

+0

@ANG, 데이터 프레임의 이름입니다. 지금 편집했습니다. 죄송합니다! –

+0

@phil_t df가 어떻게 생겼는지 붙여주세요. – Taran

답변

1

@phil_t 따라서 rollapplymeanright-aligned 형식으로 적용하려고합니다. 그룹 B에서 크기가 4 인 창에서이 값을 시도 할 때 값이 3 개인 경우 올바르게 실패합니다.

그래서 각 그룹에 대해 필요한 수의 행을 갖도록 DF를 "정규화"해야합니다.

library(plyr) 
> df <- ddply(df, 'name', function(x) { 
       rbind.fill(x, data.frame(name = rep(unique(x$name), each = max(vec) - nrow(x)))) 
       }) 

> df 
    date name px_last 
    2012-12-04 A 6.81 
    2012-12-05 A 4.28 
    2012-12-06 A 4.32 
    2012-12-04 A 6.89 
    2012-12-05 A 7.24 
    2012-12-04 B 6.81 
    2012-12-05 B 9.38 
    2012-12-06 B 3.62 
    <NA> B  NA 
    <NA> B  NA 
    2012-12-04 C 3.85 
    2012-12-05 C 4.23 
    2012-12-06 C 7.32 
    2012-12-04 C 2.84 
    2012-12-05 C 8.38 

> for(i in c(1:length(vec))){ 
    varname = paste0("ma", vec[i]) 
    df = df %>% group_by(name) %>% mutate(!!varname := rollapplyr(px_last, vec[i], mean, na.rm = TRUE, fill = "NA")) 
    } 

도움이됩니다.

+0

zoo의 개발 버전은 패딩을 피할 수있는 너비보다 짧은 시리즈를 처리 할 수 ​​있습니다. 'devtools :: install_github ("rforge/zoo/pkg/zoo")'를 설치하십시오. –

+0

@G. Grothendieck 꽤 좋은 것. 이것은 rollapply에서 구현 되었습니까? – Taran

+0

네, 그게 제가 언급 한 것입니다. –

관련 문제