2014-12-01 5 views
0

나는 몇 달 동안 Station_ID에 대한 수단을 얻기 위해 필요한 매우 큰 데이터 세트를 가지고 있습니다. 이 생산개인별 월별 평균값을 구하십시오.

DF <- read.table(text="Station_ID January February March April May June July August September October November December Year 
1  17578 30.04 12.95 33.29 134.38 167.40 89.48 49.75 65.78  50.15 30.35 70.72 20.68 1896 
2  18982 29.66 13.03 33.31 134.20 167.40 89.48 47.64 65.57  49.87 29.98 70.57 20.55 1896" 
, header = TRUE) 

:이 내 원하는 출력이됩니다

Station_ID January February March April May June July August September October November December Year 
1  17578 30.04 12.95 33.29 134.38 167.4 89.48 49.75 65.78  50.15 30.35 70.72 20.68 1896 
2  18982 29.66 13.03 33.31 134.20 167.4 89.48 47.64 65.57  49.87 29.98 70.57 20.55 1896 

:

Station_ID AVGPPT_1896 
1  17587  62.91 
2  18982  60.89 

어떤 도움을 주시면 감사하겠습니다 여기

는 데이터의 샘플입니다. 감사.

+0

도 같이'Reduce'을 시도 할 수 '줄 ("+" , DF [month.name])/(ncol (DF) - 2)'모든 행이 고유 한 ID인지 또는 서버가 분리 될 수 있는지는 분명하지 않지만 ID 당 행 수 –

답변

2

여기에는 dplyr 및 tidyr을 사용하는 옵션 하나가 있습니다. 우선 데이터를 넓은 형식에서 긴 형식으로 재구성 (tidyr의 수집 기능 사용) 한 다음 Station ID로 그룹화하고 월별 평균값을 산출하십시오.

library(tidyr) 
library(dplyr) 
gather(DF, Month, Value, -c(Station_ID, Year)) %>% 
    group_by(Station_ID) %>% 
    summarise(AVGPPT_1896 = mean(Value)) 

#Source: local data frame [2 x 2] 
# 
# Station_ID AVGPPT_1896 
#1  17578 62.91417 
#2  18982 62.60500 
+0

감사합니다! 내가 뭘 찾고 있었는지. dplyr을 사용할 기회는 대용량 데이터 세트에서 항상 유용합니다. – Vedda

2

당신이 시도 할 수 있습니다 :

DF$AVGPPT_1896<-rowMeans(DF[,-c(1,ncol(DF))]) 

또는

DF$AVGPPT_1896<-rowMeans(DF[,month.name]) 

모두 제공 :

> DF[,c("Station_ID","AVGPPT_1896")] 
    Station_ID AVGPPT_1896 
1  17578 62.91417 
2  18982 62.60500 
+1

대단히 감사합니다! – Vedda

관련 문제