2012-01-25 1 views
9

나는 각 라인이 개인을 나타내는 데이터 프레임을 가지고있다. 이 데이터 프레임에는 나이와 연도라는 두 가지 변수가 있습니다. 1 년 평균 연령 표를 만들고 싶습니다. 내가 어떻게 해?R에서 합계 대신 xtabs로 평균을 계산할 수 있습니까?

제가 생각할 수있는 가장 좋은 점은 xtabs(age ~ year, dataframe)이었습니다. 그러나 이것은 연로 한 해를 말해줍니다.

답변

16

사용 aggregate : 당신은 ... xtabs를 사용하여 위의 답을해야하는 경우

xtabs(hp~cyl+gear,aggregate(hp~cyl+gear,mtcars,mean)) 
    gear 
cyl  3  4  5 
    4 97.0000 76.0000 102.0000 
    6 107.5000 116.5000 175.0000 
    8 194.1667 0.0000 299.5000 
+0

완벽! 그리고 꽤 우아한 솔루션, 나는 추가해야합니다. 감사! –

5

는 특히 ddply

ddply(dataframe, .(year), summarise, mean(age)) 

의 plyr 패키지에서보세요.

+0

또 다른 매우 우아한 해결책을 보여 주셔서 고맙습니다. 그러나 실제 문제에는 세 가지 변수가 포함되어 있기 때문에 저는 여전히 찌르기를 할 것입니다. :) –

+2

당신은'ddply (dataframe,. (year), summarize, mean (age), max (height), sd (weight) 등등. – Justin

5

xtabs 해결책이 유용합니다. 나는 나를 위해 그것을 방해하는 패키지를로드해야한다 (그리고 오류를 준다). 또 다른 해결책은 다음과 같습니다

tapply(dfrm$age, dfrm$year, FUN=mean) 

테이블 (배열) 단지 형태 list(fac1, fac2, fac3)의 두 번째 INDEX 인수에 추가 요소를 계속 추가에 추가 차원을 얻을 수 있습니다.

의 예에 적용하여 mtcars :

tapply(mtcars$hp, list(mtcars$cyl,mtcars$gear), mean) 
     3  4  5 
4 97.0000 76.0 102.0 
6 107.5000 116.5 175.0 
8 194.1667 NA 299.5 

또는 더욱 조밀 :

with(mtcars, tapply(hp, list(cyl, gear), mean)) 
0

다른 해결책은 시대의 합을 계산하는 2 개 xtabs 기능 제를 ​​사용하여, 2 인 하나는 각 그룹에 대한 인원수를 얻고 그 다음 합계/인원수로 평균을 구합니다.

예를 들면, xtabs (세 ~ 년, dataframe)/xtabs (~ 년, dataframe는)

그러나, 집계 방식은 중간 또는 dataframe에 적용되는 다른 기능을 계산하는 데 사용할 수 있습니다. 확실히 더 유연합니다.

관련 문제