2016-09-27 2 views
-2

저는 R이 매우 새롭습니다. 나는 이걸 가지고 어떤 사람이 나를 도울 수 있기를 바랍니다. 나는 다음과 같은 예를 들어 보이는하는 data.frame 있습니다R을 먼저 집계하여 표를 만들보다 평균을 취하십시오

Year month d class 
2009 200901 1 a 
2009 200901 1 b 
2009 200902 2 a 
2009 200902 1 b 
2009 200902 1 c 
2009 200903 5 a 
2009 200903 1 b 
2009 200903 1 c 
2009 200903 3 a 
2010 201001 1 a 
2010 201001 4 b 
2010 201002 1 a 
2010 201002 7 b 
2010 201002 1 c 
2010 201003 2 a 
2010 201003 4 b 
2010 201003 2 c 
2010 201003 1 a 

내가 그들을 밖으로 교차 테이블을하고 싶다 그 결과이

Year  a  b  c 
2009  3.667 1  0.667 
2010  1.667 5  1 

처음과 같을 것이다 나는 요약 싶습니다 한 달에 한 달에 한 번씩 모든 데이터를 수집 한 다음, 각 달에 대한 평균을 취하여 각 반에 대한 연간 수를 얻으십시오.

고마워요.

+0

봐가. –

+1

그래서'data.frame' 또는'data.table'을 가지고 있습니까? "모든 데이터 요약"이란 무엇을 의미합니까? 또한 일반적으로 시도하고 실패한 코드를 표시하는 것이 좋습니다. 또한 공유하는 모든 샘플 데이터가 [reproducible] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) – Sotos

+0

내가 지금 가지고있는 데이터인지 확인하십시오. data.frame. 전에 내가 "table"을 사용하기 전에 : table (df $ year, df $ class), 그러나 그것은 한 달 동안 합계를 취할 것입니다. 또는 "tapply"를 사용하여 평균 또는 합계를 취합니다. – thd

답변

0

이 (DF는 원래의 데이터 프레임이다) 시도 :

df 

    Year month d class 
1 2009 200901 1  a 
2 2009 200901 1  b 
3 2009 200902 2  a 
4 2009 200902 1  b 
5 2009 200902 1  c 
6 2009 200903 5  a 
7 2009 200903 1  b 
8 2009 200903 1  c 
9 2009 200903 3  a 
10 2010 201001 1  a 
11 2010 201001 4  b 
12 2010 201002 1  a 
13 2010 201002 7  b 
14 2010 201002 1  c 
15 2010 201003 2  a 
16 2010 201003 4  b 
17 2010 201003 2  c 
18 2010 201003 1  a 

library(reshape2) 
df1 <- aggregate(d ~ month + class + Year, df, sum) 
df1 <- aggregate(d ~ class + Year, df1, mean) 
dcast(df1, Year~class) 

    Year  a b c 
1 2009 3.666667 1 1.0 
2 2010 1.666667 5 1.5 
+0

df1 <- aggregate (d ~ 월 + 클래스 + 연도, df, 합계)가 작동하지 않습니다. model.frame.default에 오류가 발생합니다. – thd

+0

은 데이터 프레임입니다. 그것은 작동해야합니다, 정확히 같은 코드를 사용하고 있습니까? 그것은 작동해야합니다, 그것은 나를 위해 작동합니다. –

+0

네 말이 맞아, 지금 작동 해, 고마워. – thd

1

dat이 dataframe입니다 tidyrdplyr,있는 솔루션입니다.

library(tidyr) 
library(dplyr) 

dat %>% group_by(Year, month,class) %>% summarise(d=sum(d)) %>% 
    spread(class, d) %>% group_by(Year) %>% 
     summarise(a=mean(a,na.rm=T),b=mean(b,na.rm=T),c=mean(c,na.rm=T)) 

출력은 다음과 같습니다 reshape` 패키지`에서 cast``에 대한

# A tibble: 2 x 4 
    Year  a  b  c 
    <int> <dbl> <dbl> <dbl> 
1 2009 3.666667  1 1.0 
2 2010 1.666667  5 1.5 
관련 문제