2017-03-17 2 views
0

필자가 작성한 함수를 조정하는 데 어려움을 겪고 있으며 두통을 겪고 있으므로 여기에 게시 할 생각입니다.By 함수를 통한 가중 평균

함수에서 나는 R의 "by"함수를 사용하는데, 이는 데이터 프레임을 부분 집합에두고 함수를 실행합니다.

이제 'descr'패키지의 weighted.mean을 포함하도록 함수를 확장하고 x 및 w 길이가 동일하지 않은 오류가 발생합니다.

일부 코드를 표시합니다 :

set.seed(100) 
d1 <- rnorm(300) 
d2 <- (floor(runif(100, min=1, max=4))) 
weight <- rnorm(300,mean = 1, sd = 1) 
df <- cbind.data.frame(d1,d2,weight) 
df$d2 <- factor(df$d2, 
       levels = c(1,2,3,4), 
       labels = c("red", "blue", "green","orange")) 



require('descr') 

by(df$d1, df$d2, function(x) mean(x=x, na.rm=TRUE)) 
by(df$d1, df$d2, function(x) weighted.mean(x=x,w=df$weight na.rm=TRUE)) 

그래서 내가 1 개 수치, 4 단계 1 개 요소와 dataframe을 만들고있어 만 3과 체중 변수 (예를 들어/fitlered 누락 된 데이터) 데이터를 가지고 있지만 .

8 번째 명령은 지금 가지고있는 것이지만 지금은 그 안에 무게를 더할 필요가 있습니다. 이렇게하면 색상 당 평균값이됩니다. 또한 그것은 d2의 레벨에 NA를 반환하는데, 여기에는 내가 필요로하는 데이터가 없습니다. (다른 데이터 세트를 작업하면서 결과를 병합해야하므로 정의 된 모든 레벨도 출력되어야합니다.)

9 번째 명령 (weighted.mean이있는 명령)은 오류를 반환합니다 x/w의 길이가 다른 것입니다. 이것은 df $ d2 조각 당 df $ d1의 하위 집합을 만들지 만 weighted.mean (x = x, w = weight, ...)의 가중치는 전체 변수이며 부분 집합.

weighted.mean의 코드를보고 재 작성 할 수 없는지 알아 보려고했지만 해결책을 찾지 못했습니다. 도움은 언제나 환영합니다.

답변

0

트릭은, 완벽하게 작동합니다 .. 하나 몰랐, 부호를 각각

by(data = df, INDICES = df$d2, FUN = function(dfgroup) { 
    weighted.mean(x = dfgroup$d1, w = dfgroup$weight, na.rm=TRUE) 
}) 
+0

텍사스 백만으로 나눈 입력으로 전체 data.frame을 사용하는 것입니다하지만 지금부터 그것을 기억합니다 .. –