2012-06-12 5 views
5

가능한 중복 :
Calculating weighted mean and standard deviationR에서 가중 평균을 계산하는 방법?

가 어떻게 R의 가중 평균을 계산합니까? (: 길이, 폭 등 또는) (10 개) 및 3 요소 크기 가중 평균 (10 * 1 + 2 * 3)/4 = 4 2.

> z = data.frame(count=c(1,3), size=c(10,2)) 
> z 
    count size 
1  1 10 
2  3 2 

의 아르

예를 들어, I는 1 개 소자의 크기 인 4 개 요소를 가지고있다.

+1

왜 downvote입니까? – Frank

+6

"R의 가중 평균"에 대한 Google 검색이 weighted.mean의 도움말 페이지를 첫 번째 결과로 반환하기 때문에 나 자신을 위해 말하자면 저는 downvoted였습니다. – joran

+3

@Frank Q 옆에있는 투표 수 밑에있는 아래쪽 삼각형 위로 마우스를 가져 가면 도구 팁에 "이 질문에는 연구 노력이 표시되지 않고 ..."라고 표시됩니다. 여기 누군가가 이미 검색을 통해 쉽게 찾을 수있는 유사한 Q를 이미 요청했기 때문에 Google 검색을 통해 올바른 답변으로 이동하게됩니다. 그 이유는 Downvotes를 갖고 Q가 닫힌 이유 일 수 있습니다. –

답변

19

사용 weighted.mean : 이미 단지 그것을 구현하기 위해 올바른 방향으로 찔러 필요,이를 계산하는 방법을 알고 같은

> weighted.mean(z$size, z$count) 
[1] 4 
11

보인다. R은 벡터화되어 있기 때문에, 이것은 아주 간단합니다 :

with(z, sum(count*size)/sum(count)) 

with 비트 그냥 입력에 저장하고 sum(z$count*z$size)/sum(z$count)

또는 당신은 또한 지적 기능 weighted.mean() 내장 사용하는 것과 동일합니다. 자신의 함수를 사용하는 것이 더 빠르다고 증명할 수는 있지만 내장 함수가하는 것과 동일한 양의 오류 검사는하지 않을 것입니다.

builtin <- function() with(z, weighted.mean(count, size)) 
rollyourown <- function() with(z, sum(count*size)/sum(count)) 

require(rbenchmark) 
    benchmark(builtin(), rollyourown(), 
      replications = 1000000, 
      columns = c("test", "elapsed", "relative"), 
      order = "relative") 
#----- 
      test elapsed relative 
2 rollyourown() 13.26 1.000000 
1  builtin() 22.84 1.722474 
관련 문제