2015-04-15 20 views
2

我有幾年的日常溫度值,1949 - 2010年。我想計算每月的手段。下面是數據的一個例子:我不能讓首長或尾巴從日常臨時數年的數據框中獲取月度資料

head(tmeasmax) 
TIMESTEP MEAN.C. MINIMUM.C. MAXIMUM.C. VARIANCE.C.2. STD_DEV.C.  SUM COUNT 
1949-01-01 6.836547  6.65  7.33 0.02850574 0.1688364 1.426652  6 
1949-01-02 10.533371  10.24  10.74 0.06140426 0.2477988 1.426652  6 
1949-01-03 18.746729  18.02  19.78 0.18507860 0.4302076 1.426652  6 
1949-01-04 21.244562  20.09  22.40 0.76106980 0.8723931 1.426652  6 
1949-01-05 3.826716  3.11  5.37 0.52706647 0.7259935 1.426652  6 
1949-01-06 9.127782  8.46  10.26 0.20236358 0.4498484 1.426652  6 

str(tmeasmax) 
'data.frame': 22645 obs. of 8 variables: 
$ TIMESTEP  : Date, format: "1949-01-01" "1949-01-02" ... 
$ MEAN.C.  : num 6.84 10.53 18.75 21.24 3.83 ... 
$ MINIMUM.C. : num 6.65 10.24 18.02 20.09 3.11 ... 
$ MAXIMUM.C. : num 7.33 10.74 19.78 22.4 5.37 ... 
$ VARIANCE.C.2.: num 0.0285 0.0614 0.1851 0.7611 0.5271 ... 
$ STD_DEV.C. : num 0.169 0.248 0.43 0.872 0.726 ... 
$ SUM   : num 1.43 1.43 1.43 1.43 1.43 ... 
$ COUNT  : int 6 6 6 6 6 6 6 6 6 6 ... 

There is a previous question。我想我可以使用aggregate,但我不知道如何將日期分解成幾年和幾個月,然後再逐步嵌套這些年份的月份。我在一個循環內嘗試了一個循環,但我永遠無法獲得嵌套循環。

編輯回覆意見/問題: 我正在尋找「MEAN.C.」的意思。

+0

每月手段做到這一點對所有的列? –

回答

3

這是一個快速的data.table解決方案。我假設你想要的MEAN.C.手段(?)

library(data.table) 
setDT(tmeasmax)[, .(MontlyMeans = mean(MEAN.C.)), by = .(year(TIMESTEP), month(TIMESTEP))] 
# year month MontlyMeans 
# 1: 1949  1 11.71928 

您也可以一次,如果你想要的列

tmeasmax[, lapply(.SD, mean), by = .(year(TIMESTEP), month(TIMESTEP))] 
# year month MEAN.C. MINIMUM.C. MAXIMUM.C. VARIANCE.C.2. STD_DEV.C.  SUM COUNT 
# 1: 1949  1 11.71928  11.095 12.64667  0.2942481 0.482513 1.426652  6 
+0

大衛,在你的第二個例子中,'tmeasmax'是'setDT(tmeasmax)'? – eipi10

+0

@ eipi10它不應該如果你已經跑第一線。 –

+0

明白了。謝謝。仍然得到'data.table'的縈繞。 – eipi10

2

這裏是一種與dplyr包做到這一點:

library(dplyr) 
library(lubridate) 

tmeasmax$TIMESTEP = ymd(tmeasmax$TIMESTEP) 

tmeasmax %>% 
    group_by(Year=year(TIMESTEP), Month=month(TIMESTEP)) %>% 
    summarise(meanDailyMin=mean(MINIMUM.C.), 
      meanDailyMean=mean(MEAN.C.)) 

    Year Month meanDailyMin meanDailyMean 
1 1949  1  11.095  11.71928 

您可以用類似的方式總結了一個月的任何其他列。

0

您可以使用lubridate包創建一個由年份組合組成的新因子變量,然後使用aggregate

library('lubridate') 

tmeasmax2 <- within(tmeasmax, { 
     monthlies <- paste(year(TIMESTEP), 
          month(TIMESTEP)) 
}) 

aggregate(tmeasmax2, list(monthlies), mean, na.rm = TRUE) 
相關問題