2016-06-30 41 views
1

我有一個美國降水數據集,除以:州,區(州內),年和月。記錄追溯到1895年。R中多個條件子集的環路

我試圖提取每個州內每個地區的121年平均值(1895年至今)。顯然,我們可以通過分割和/或子集來完成,但我不會一遍又一遍地重寫相同的基本代碼。我想要做的是運行一個循環,通過國家,地區和月份的數據集,爲12個月的每個月提供121年的平均值 - 即:alabama,01區,1月 - 10月,10區。

這裏是第1和數據表的最後幾行:

state, district, year, Jan, Feb, Mar, Apr, May, June, July, Aug, Sept, Oct, Nov, Dec 
01, 01 1895 7.37 1.41 7.17 2.72 3.06 4.04 4.58 4.00 3.41 2.28 1.83 5.83 

... 

50, 13, 2016, 4.77, 3.02, 3.28, -9.99, -9.99, -9.99, -9.99, -9.99, -9.99, -9.99, -9.99, -9.99 

在這方面的任何建議/幫助將不勝感激。謝謝!

+0

你錯過了一些逗號。 – alistaire

+0

'圖書館(tidyr);圖書館(dplyr); df%>%gather(month,value,Jan:Dec)%>%group_by(state,district,month)%>%summarize(avg = mean(value))或base或data.table等效 – alistaire

+0

不需要循環。一個簡單的聚合可以工作:'meandf < - 聚合(。〜state + district,sourcedf,FUN = mean)' – Parfait

回答

1

我們可以使用data.table

library(data.table) 
melt(setDT(df), id.var = c('state', 'district', 'year'), 
    variable.name= 'month')[, .(avg = mean(value)) ,.(state, district, month)]