按时间间隔创建月平均值

时间:2021-02-03 15:29:25

Sorry if this has already been posted but I looked really hard and could not find anything.

对不起,如果这已经被张贴,但我真的找不到任何东西。

I am working with monthly temperature observations for 30 years, comprising January 1960 to December 1989. It looks like this:

我从事每月温度观测工作已有30年,包括1960年1月至1989年12月。它看起来像这样:

> head(df)
        date     temp
1 1960-01-01 22.92235
2 1960-02-01 23.07059
3 1960-03-01 23.10941
4 1960-04-01 20.78353
5 1960-05-01 17.45176
6 1960-06-01 17.31765

First, what I need to do is to average all januaries, februaries, marches and etc for the whole period.

首先,我要做的是对所有的一月、二月、游行等进行平均。

Then, I would like to do the same for specific periods of time (3 years, 5 years, 10 years etc).

然后,我想在特定的时间段(3年,5年,10年等)做同样的事情。

For example,

例如,

  • The average of all jan, feb, mar etc between 1960 and 1964;
  • 1960年至1964年间1月、2月、3月的平均值;
  • The average of all jan, feb, mar etc between 1965 and 1969;
  • 一九六五年至一九六九年一月、二月、三月等的平均数;
  • and so on.
  • 等等。

The final result would consist of month, period and temperature, something like this:

最终的结果将包括月份、期间和温度,大致如下:

Month    Period Temp
  Jan 1960-1989  17
  Feb 1960-1989  12
  Mar 1960-1989   7
  Apr 1960-1989   9
  May 1960-1989  15
  Jun 1960-1989  12
  Jul 1960-1989  17
  Aug 1960-1989  22
  Sep 1960-1989  21
  Oct 1960-1989  21
  Nov 1960-1989  18
  Dec 1960-1989  17
  Jan 1960-1964  17
  Feb 1960-1964  12
  Mar 1960-1964   7
  Apr 1960-1964   9
  May 1960-1964   9
  Jun 1960-1964  11
  Jul 1960-1964  14
  Aug 1960-1964  18
  Sep 1960-1964  13
  Oct 1960-1964  12
  Nov 1960-1964  17
  Dec 1960-1964  11

Any ideias on how to do this?

有什么办法吗?

In case you find useful, here is one clone of my dataset:

如果你觉得有用,以下是我的数据集的一个克隆:

df <- structure(list(date = structure(c(-3653, -3622, -3593, -3562, 
-3532, -3501, -3471, -3440, -3409, -3379, -3348, -3318, -3287, 
-3256, -3228, -3197, -3167, -3136, -3106, -3075, -3044, -3014, 
-2983, -2953, -2922, -2891, -2863, -2832, -2802, -2771, -2741, 
-2710, -2679, -2649, -2618, -2588, -2557, -2526, -2498, -2467, 
-2437, -2406, -2376, -2345, -2314, -2284, -2253, -2223, -2192, 
-2161, -2132, -2101, -2071, -2040, -2010, -1979, -1948, -1918, 
-1887, -1857, -1826, -1795, -1767, -1736, -1706, -1675, -1645, 
-1614, -1583, -1553, -1522, -1492, -1461, -1430, -1402, -1371, 
-1341, -1310, -1280, -1249, -1218, -1188, -1157, -1127, -1096, 
-1065, -1037, -1006, -976, -945, -915, -884, -853, -823, -792, 
-762, -731, -700, -671, -640, -610, -579, -549, -518, -487, -457, 
-426, -396, -365, -334, -306, -275, -245, -214, -184, -153, -122, 
-92, -61, -31, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 
334, 365, 396, 424, 455, 485, 516, 546, 577, 608, 638, 669, 699, 
730, 761, 790, 821, 851, 882, 912, 943, 974, 1004, 1035, 1065, 
1096, 1127, 1155, 1186, 1216, 1247, 1277, 1308, 1339, 1369, 1400, 
1430, 1461, 1492, 1520, 1551, 1581, 1612, 1642, 1673, 1704, 1734, 
1765, 1795, 1826, 1857, 1885, 1916, 1946, 1977, 2007, 2038, 2069, 
2099, 2130, 2160, 2191, 2222, 2251, 2282, 2312, 2343, 2373, 2404, 
2435, 2465, 2496, 2526, 2557, 2588, 2616, 2647, 2677, 2708, 2738, 
2769, 2800, 2830, 2861, 2891, 2922, 2953, 2981, 3012, 3042, 3073, 
3103, 3134, 3165, 3195, 3226, 3256, 3287, 3318, 3346, 3377, 3407, 
3438, 3468, 3499, 3530, 3560, 3591, 3621, 3652, 3683, 3712, 3743, 
3773, 3804, 3834, 3865, 3896, 3926, 3957, 3987, 4018, 4049, 4077, 
4108, 4138, 4169, 4199, 4230, 4261, 4291, 4322, 4352, 4383, 4414, 
4442, 4473, 4503, 4534, 4564, 4595, 4626, 4656, 4687, 4717, 4748, 
4779, 4807, 4838, 4868, 4899, 4929, 4960, 4991, 5021, 5052, 5082, 
5113, 5144, 5173, 5204, 5234, 5265, 5295, 5326, 5357, 5387, 5418, 
5448, 5479, 5510, 5538, 5569, 5599, 5630, 5660, 5691, 5722, 5752, 
5783, 5813, 5844, 5875, 5903, 5934, 5964, 5995, 6025, 6056, 6087, 
6117, 6148, 6178, 6209, 6240, 6268, 6299, 6329, 6360, 6390, 6421, 
6452, 6482, 6513, 6543, 6574, 6605, 6634, 6665, 6695, 6726, 6756, 
6787, 6818, 6848, 6879, 6909, 6940, 6971, 6999, 7030, 7060, 7091, 
7121, 7152, 7183, 7213, 7244, 7274), class = "Date"), temp = c(22.9223529411765, 
23.0705882352941, 23.1094117647059, 20.7835294117647, 17.4517647058824, 
17.3176470588235, 18.0494117647059, 19.6188235294118, 21.3023529411765, 
23.1105882352941, 22.2364705882353, 22.7482352941176, 23.5870588235294, 
24.0023529411765, 23.0094117647059, 22.0176470588235, 19.4917647058824, 
18.1011764705882, 18.3164705882353, 20.0623529411765, 22.8717647058824, 
23.2576470588235, 23.68, 22.3694117647059, 22.9517647058824, 
23.6976470588235, 23.3294117647059, 20.8564705882353, 18.16, 
15.8988235294118, 15.7988235294118, 18.4176470588235, 20.8423529411765, 
20.3247058823529, 22.3070588235294, 22.2035294117647, 24.2235294117647, 
23.6976470588235, 24.4082352941176, 21.1752941176471, 18.1023529411765, 
16.1211764705882, 18.3164705882353, 19.7635294117647, 23.1294117647059, 
22.9964705882353, 23.6552941176471, 22.6964705882353, 23.6011764705882, 
23.6517647058824, 23.7035294117647, 22.4352941176471, 18.5835294117647, 
16.5976470588235, 15.7741176470588, 19.2541176470588, 20.8776470588235, 
20.5729411764706, 21.1729411764706, 21.5870588235294, 22.4576470588235, 
23.6058823529412, 21.84, 21.6694117647059, 19.2458823529412, 
18.7517647058824, 17.7811764705882, 19.4764705882353, 21.9270588235294, 
21.5470588235294, 22.88, 23.2458823529412, 24.2776470588235, 
25.2470588235294, 23.4694117647059, 21.4435294117647, 19.3941176470588, 
18.5447058823529, 17.6, 18.3764705882353, 19.8529411764706, 22.0823529411765, 
22.7294117647059, 23.4011764705882, 23.3611764705882, 24.2505882352941, 
23.2870588235294, 21.9482352941176, 20.5552941176471, 18.0788235294118, 
18.5929411764706, 20.8752941176471, 21.9023529411765, 23.6105882352941, 
22.4070588235294, 21.5635294117647, 23.3129411764706, 22.9741176470588, 
23.3670588235294, 19.6105882352941, 16.9941176470588, 17.7670588235294, 
17.4858823529412, 17.8517647058824, 20.26, 22.1576470588235, 
23.8364705882353, 23.4447058823529, 24.8129411764706, 25.1764705882353, 
24.2694117647059, 21.5035294117647, 20.0458823529412, 18.4694117647059, 
18.4541176470588, 19.5388235294118, 22.02, 20.5364705882353, 
22.9858823529412, 21.9752941176471, 23.7729411764706, 24.0576470588235, 
24.0941176470588, 22.1552941176471, 21.2329411764706, 19.5611764705882, 
17.8788235294118, 18.6823529411765, 20.1541176470588, 21.6258823529412, 
21.5211764705882, 23.9811764705882, 24.8352941176471, 24.5882352941176, 
24.1729411764706, 21.1035294117647, 19.0435294117647, 17.08, 
17.4529411764706, 19.1458823529412, 20.4447058823529, 20.7129411764706, 
21.5047058823529, 22.6952941176471, 23.4364705882353, 23.1, 24.1847058823529, 
19.8105882352941, 19.9847058823529, 20.5188235294118, 17.7658823529412, 
19.4435294117647, 20.7588235294118, 21.7835294117647, 22.7788235294118, 
23.2388235294118, 24.9129411764706, 25.6, 23.5647058823529, 24.0058823529412, 
19.7823529411765, 19.3152941176471, 18.7741176470588, 19.0305882352941, 
20.5576470588235, 21.3611764705882, 21.4247058823529, 23.4811764705882, 
23.6505882352941, 25.1870588235294, 23.3541176470588, 21.4823529411765, 
18.7364705882353, 17.7235294117647, 18.3976470588235, 19.7235294117647, 
21.0741176470588, 21.6094117647059, 22.9635294117647, 22.4011764705882, 
23.4152941176471, 24.7741176470588, 24.3270588235294, 20.7976470588235, 
18.8764705882353, 17.7788235294118, 16.4129411764706, 21.4117647058824, 
22.3317647058824, 21.66, 22.3694117647059, 23.0917647058824, 
24.4541176470588, 23.2847058823529, 23.3164705882353, 21.2529411764706, 
19.1258823529412, 17.3882352941176, 17.3823529411765, 19.0529411764706, 
19.6576470588235, 20.2976470588235, 21.9023529411765, 23.3094117647059, 
24.0117647058824, 25.5611764705882, 24.9129411764706, 21.3964705882353, 
19.9870588235294, 18.3929411764706, 20.9917647058824, 20.3058823529412, 
21.4435294117647, 23.1941176470588, 22.8388235294118, 22.5176470588235, 
24.6317647058824, 24.6541176470588, 24.2, 20.84, 18.4576470588235, 
17.5011764705882, 19.16, 20.54, 20.1517647058824, 22.6776470588235, 
22.7470588235294, 22.7882352941176, 22.0811764705882, 24.2152941176471, 
22.9235294117647, 20.8411764705882, 19.6188235294118, 17.16, 
16.0529411764706, 20.3223529411765, 19.9752941176471, 22.5152941176471, 
22.2705882352941, 23.1541176470588, 23.1047058823529, 23.9517647058824, 
24.8176470588235, 22.18, 20.5023529411765, 17.3505882352941, 
19.1917647058824, 19.9894117647059, 19.0235294117647, 22.8235294117647, 
22.7094117647059, 23.8741176470588, 24.0517647058824, 25.1764705882353, 
23.9235294117647, 21.2929411764706, 20.6117647058824, 17.1305882352941, 
16.3470588235294, 19.6470588235294, 21.3341176470588, 20.2176470588235, 
23.7435294117647, 22.6741176470588, 22.9070588235294, 24.7152941176471, 
23.2905882352941, 20.5776470588235, 18.9635294117647, 19.0658823529412, 
18.8423529411765, 20.0729411764706, 21.3047058823529, 22.1588235294118, 
24.0388235294118, 22.1917647058824, 24.0517647058824, 24.8729411764706, 
23.0117647058824, 23, 21.3094117647059, 19.4105882352941, 20.3470588235294, 
19.4482352941176, 20.0670588235294, 21.6364705882353, 23.4211764705882, 
23.16, 25.4788235294118, 26.4741176470588, 24.0482352941176, 
21.4176470588235, 21.7164705882353, 19.0905882352941, 19.6752941176471, 
18.1611764705882, 20.0482352941176, 23.4917647058824, 23.4894117647059, 
22.5482352941176, 23.1376470588235, 24.9811764705882, 24.1552941176471, 
22.8423529411765, 19.7435294117647, 16.4, 17.3105882352941, 20.5235294117647, 
21.0494117647059, 23.1352941176471, 23.9435294117647, 23.9058823529412, 
24.9835294117647, 24.6952941176471, 24.0047058823529, 23.3164705882353, 
21.5823529411765, 18.3447058823529, 18.1964705882353, 20.0035294117647, 
20.7152941176471, 22.5705882352941, 24.6541176470588, 23.2329411764706, 
25.0517647058824, 24.3329411764706, 23.5811764705882, 22.9988235294118, 
19.4976470588235, 17.3188235294118, 19.5635294117647, 19.0211764705882, 
19.7223529411765, 22.6858823529412, 23.9423529411765, 23.6905882352941, 
25.7129411764706, 23.9505882352941, 24.4376470588235, 22.6070588235294, 
19.8882352941176, 17.2058823529412, 16.4211764705882, 20.02, 
21.9458823529412, 21.9341176470588, 22.74, 23.8, 23.9611764705882, 
24.4564705882353, 24, 23.2129411764706, 19.4729411764706, 17.7105882352941, 
16.9682352941176, 19.0341176470588, 20.2917647058824, 20.7776470588235, 
22.9364705882353, 22.7894117647059)), .Names = c("date", "temp"
), row.names = c(NA, -360L), class = "data.frame")

2 个解决方案

#1


2  

One option would be to use data.table with year grouping by cut or findInterval. For the first case, ie. getting mean of each month aggregating over all the years, we convert the 'date' to Date class and extract the months, use it as grouping variable and get the mean of 'temp'. Note that we convert the 'data.frame' to 'data.table' first (setDT(df)).

一种选择是使用数据。按cut或findInterval进行年分组的表。第一个例子。我们将“date”类转换为date类,提取出月份,并将其作为分组变量,得到“temp”的均值。注意,我们将“data.frame”转换为“data”。表的第一(setDT(df))。

library(data.table)
setDT(df)[, list(Temp=mean(temp)) , by = .(Months= months(as.Date(date), abbr=TRUE))]
#    Months     Temp
# 1:    Jan 23.90506
# 2:    Feb 24.40012
# 3:    Mar 23.73714
# 4:    Apr 21.68584
# 5:    May 19.53863
# 6:    Jun 17.90322
# 7:    Jul 17.97675
# 8:    Aug 19.56051
# 9:    Sep 20.90125
#10:    Oct 21.96886
#11:    Nov 22.86102
#12:    Dec 22.92537

For periodwise and monthly grouping, we need to create a period column. One way would be either cut or findInterval. For example, if we are looking for a 5 year window, ie. 1960-1964, 1965-1969, etc., we create the 'Period' column by creating the vec in findInterval using seq, change the numeric index derived from findInterval to 'lbl' created from paste. Use the 'Month' and 'Period' as grouping variable and the rest is same as before.

对于周期和月度分组,我们需要创建一个周期列。一种方法是cut或findInterval。例如,如果我们正在寻找一个5年的期限。1960-1964、1965-1969等等,我们通过使用seq在findInterval中创建vec,将从findInterval派生的数值索引更改为从粘贴创建的“lbl”,从而创建“Period”列。使用“月”和“周期”作为分组变量,其余的和以前一样。

setDT(df)[, c('Month', 'Period') := {tmp <- as.Date(date)
         tmp1 <- as.numeric(format(tmp, '%Y'))
         tmp2 <- months(tmp, abbr=TRUE)
         i1 <- seq(min(tmp1), max(tmp1)+4, by=5)
         i2 <- i1+4
         lbl <-paste(i1, i2, sep='-')         
         list(tmp2, lbl[findInterval(tmp1, i1)])
         }]
df[, list(Temp= mean(temp)), .(Month, Period)]
#     Month    Period     Temp
# 1:   Jan 1960-1964 23.45718
# 2:   Feb 1960-1964 23.62400
# 3:   Mar 1960-1964 23.51200
# 4:   Apr 1960-1964 21.45365
# 5:   May 1960-1964 18.35788
# 6:   Jun 1960-1964 16.80729
# 7:   Jul 1960-1964 17.25106
# 8:   Aug 1960-1964 19.42329
# 9:   Sep 1960-1964 21.80471
#10:   Oct 1960-1964 22.05247
#11:   Nov 1960-1964 22.61035
#12:   Dec 1960-1964 22.32094
#13:   Jan 1965-1969 23.64447
#14:   Feb 1965-1969 24.25082
#15:   Mar 1965-1969 23.24659
#16:   Apr 1965-1969 21.23506
#17:   May 1965-1969 19.24706
#18:   Jun 1965-1969 18.32235
#19:   Jul 1965-1969 17.98282
#20:   Aug 1965-1969 19.22376
#21:   Sep 1965-1969 21.19247
#22:   Oct 1965-1969 21.98682
#23:   Nov 1965-1969 22.96776
#24:   Dec 1965-1969 22.72612
#25:   Jan 1970-1974 24.12165
#26:   Feb 1970-1974 24.50659
#27:   Mar 1970-1974 23.87412
#28:   Apr 1970-1974 21.71153
#29:   May 1970-1974 19.75600
#30:   Jun 1970-1974 18.83976
#31:   Jul 1970-1974 18.05388
#32:   Aug 1970-1974 19.20518
#33:   Sep 1970-1974 20.59788
#34:   Oct 1970-1974 21.41859
#35:   Nov 1970-1974 22.03859
#36:   Dec 1970-1974 23.15953
#37:   Jan 1975-1979 23.71882
#38:   Feb 1975-1979 24.49788
#39:   Mar 1975-1979 23.93600
#40:   Apr 1975-1979 21.02565
#41:   May 1975-1979 19.21318
#42:   Jun 1975-1979 17.64424
#43:   Jul 1975-1979 18.00000
#44:   Aug 1975-1979 20.32659
#45:   Sep 1975-1979 20.71200
#46:   Oct 1975-1979 22.06894
#47:   Nov 1975-1979 22.42565
#48:   Dec 1975-1979 22.97224
#49:   Jan 1980-1984 23.91882
#50:   Feb 1980-1984 25.03812
#51:   Mar 1980-1984 23.81835
#52:   Apr 1980-1984 21.69365
#53:   May 1980-1984 20.62071
#54:   Jun 1980-1984 18.40965
#55:   Jul 1980-1984 18.88071
#56:   Aug 1980-1984 19.46376
#57:   Sep 1980-1984 20.35553
#58:   Oct 1980-1984 22.06565
#59:   Nov 1980-1984 23.48047
#60:   Dec 1980-1984 22.88965
#61:   Jan 1985-1989 24.56941
#62:   Feb 1985-1989 24.48329
#63:   Mar 1985-1989 24.03576
#64:   Apr 1985-1989 22.99553
#65:   May 1985-1989 20.03694
#66:   Jun 1985-1989 17.39600
#67:   Jul 1985-1989 17.69200
#68:   Aug 1985-1989 19.72047
#69:   Sep 1985-1989 20.74494
#70:   Oct 1985-1989 22.22071
#71:   Nov 1985-1989 23.64329
#72:   Dec 1985-1989 23.48376
#    Month    Period     Temp

In the same way, we can get 10 year or other windows.

同样地,我们可以得到10年或其他的windows。

#2


1  

The first part of question Average all januaries, februaries, you can get by -

问题的第一部分是平均所有一月,二月,你可以通过-

monthly_data <- aggregate(df$temp,by=list(strftime(df$date, "%m")),mean) 
cbind(monthly_data[2], Month = month.abb, Period = "1960-1989")

#         x   Month    Period
# 1  23.90506   Jan 1960-1989
# 2  24.40012   Feb 1960-1989
# 3  23.73714   Mar 1960-1989
# 4  21.68584   Apr 1960-1989
# 5  19.53863   May 1960-1989
# 6  17.90322   Jun 1960-1989
# 7  17.97675   Jul 1960-1989
# 8  19.56051   Aug 1960-1989
# 9  20.90125   Sep 1960-1989
# 10 21.96886   Oct 1960-1989
# 11 22.86102   Nov 1960-1989
# 12 22.92537   Dec 1960-1989

The second part getting average for a particular range, you can try

第二部分取某一范围的平均值,你可以试试

from <- 1960
to <- 1964
subset_data <- subset(df, as.numeric(strftime(df$date, "%Y")) %in% from:to)
subset_mothly_data <- aggregate(subset_data$temp,by=list(strftime(subset_data$date, "%m")),mean) 
cbind(Temp = subset_mothly_data[2], Month = month.abb , Period = paste(as.character(from), "-", as.character(to), sep = ""))

# x    Month    Period
# 1  23.45718   Jan 1960-1964
# 2  23.62400   Feb 1960-1964
# 3  23.51200   Mar 1960-1964
# 4  21.45365   Apr 1960-1964
# 5  18.35788   May 1960-1964
# 6  16.80729   Jun 1960-1964
# 7  17.25106   Jul 1960-1964
# 8  19.42329   Aug 1960-1964
# 9  21.80471   Sep 1960-1964
# 10 22.05247   Oct 1960-1964
# 11 22.61035   Nov 1960-1964
# 12 22.32094   Dec 1960-1964

I have shown this for the period 1960 - 1964 . Similarly, you could do this for any given period.

我在1960年到1964年间展示过。类似地,你可以在任何给定的周期内这样做。

#1


2  

One option would be to use data.table with year grouping by cut or findInterval. For the first case, ie. getting mean of each month aggregating over all the years, we convert the 'date' to Date class and extract the months, use it as grouping variable and get the mean of 'temp'. Note that we convert the 'data.frame' to 'data.table' first (setDT(df)).

一种选择是使用数据。按cut或findInterval进行年分组的表。第一个例子。我们将“date”类转换为date类,提取出月份,并将其作为分组变量,得到“temp”的均值。注意,我们将“data.frame”转换为“data”。表的第一(setDT(df))。

library(data.table)
setDT(df)[, list(Temp=mean(temp)) , by = .(Months= months(as.Date(date), abbr=TRUE))]
#    Months     Temp
# 1:    Jan 23.90506
# 2:    Feb 24.40012
# 3:    Mar 23.73714
# 4:    Apr 21.68584
# 5:    May 19.53863
# 6:    Jun 17.90322
# 7:    Jul 17.97675
# 8:    Aug 19.56051
# 9:    Sep 20.90125
#10:    Oct 21.96886
#11:    Nov 22.86102
#12:    Dec 22.92537

For periodwise and monthly grouping, we need to create a period column. One way would be either cut or findInterval. For example, if we are looking for a 5 year window, ie. 1960-1964, 1965-1969, etc., we create the 'Period' column by creating the vec in findInterval using seq, change the numeric index derived from findInterval to 'lbl' created from paste. Use the 'Month' and 'Period' as grouping variable and the rest is same as before.

对于周期和月度分组,我们需要创建一个周期列。一种方法是cut或findInterval。例如,如果我们正在寻找一个5年的期限。1960-1964、1965-1969等等,我们通过使用seq在findInterval中创建vec,将从findInterval派生的数值索引更改为从粘贴创建的“lbl”,从而创建“Period”列。使用“月”和“周期”作为分组变量,其余的和以前一样。

setDT(df)[, c('Month', 'Period') := {tmp <- as.Date(date)
         tmp1 <- as.numeric(format(tmp, '%Y'))
         tmp2 <- months(tmp, abbr=TRUE)
         i1 <- seq(min(tmp1), max(tmp1)+4, by=5)
         i2 <- i1+4
         lbl <-paste(i1, i2, sep='-')         
         list(tmp2, lbl[findInterval(tmp1, i1)])
         }]
df[, list(Temp= mean(temp)), .(Month, Period)]
#     Month    Period     Temp
# 1:   Jan 1960-1964 23.45718
# 2:   Feb 1960-1964 23.62400
# 3:   Mar 1960-1964 23.51200
# 4:   Apr 1960-1964 21.45365
# 5:   May 1960-1964 18.35788
# 6:   Jun 1960-1964 16.80729
# 7:   Jul 1960-1964 17.25106
# 8:   Aug 1960-1964 19.42329
# 9:   Sep 1960-1964 21.80471
#10:   Oct 1960-1964 22.05247
#11:   Nov 1960-1964 22.61035
#12:   Dec 1960-1964 22.32094
#13:   Jan 1965-1969 23.64447
#14:   Feb 1965-1969 24.25082
#15:   Mar 1965-1969 23.24659
#16:   Apr 1965-1969 21.23506
#17:   May 1965-1969 19.24706
#18:   Jun 1965-1969 18.32235
#19:   Jul 1965-1969 17.98282
#20:   Aug 1965-1969 19.22376
#21:   Sep 1965-1969 21.19247
#22:   Oct 1965-1969 21.98682
#23:   Nov 1965-1969 22.96776
#24:   Dec 1965-1969 22.72612
#25:   Jan 1970-1974 24.12165
#26:   Feb 1970-1974 24.50659
#27:   Mar 1970-1974 23.87412
#28:   Apr 1970-1974 21.71153
#29:   May 1970-1974 19.75600
#30:   Jun 1970-1974 18.83976
#31:   Jul 1970-1974 18.05388
#32:   Aug 1970-1974 19.20518
#33:   Sep 1970-1974 20.59788
#34:   Oct 1970-1974 21.41859
#35:   Nov 1970-1974 22.03859
#36:   Dec 1970-1974 23.15953
#37:   Jan 1975-1979 23.71882
#38:   Feb 1975-1979 24.49788
#39:   Mar 1975-1979 23.93600
#40:   Apr 1975-1979 21.02565
#41:   May 1975-1979 19.21318
#42:   Jun 1975-1979 17.64424
#43:   Jul 1975-1979 18.00000
#44:   Aug 1975-1979 20.32659
#45:   Sep 1975-1979 20.71200
#46:   Oct 1975-1979 22.06894
#47:   Nov 1975-1979 22.42565
#48:   Dec 1975-1979 22.97224
#49:   Jan 1980-1984 23.91882
#50:   Feb 1980-1984 25.03812
#51:   Mar 1980-1984 23.81835
#52:   Apr 1980-1984 21.69365
#53:   May 1980-1984 20.62071
#54:   Jun 1980-1984 18.40965
#55:   Jul 1980-1984 18.88071
#56:   Aug 1980-1984 19.46376
#57:   Sep 1980-1984 20.35553
#58:   Oct 1980-1984 22.06565
#59:   Nov 1980-1984 23.48047
#60:   Dec 1980-1984 22.88965
#61:   Jan 1985-1989 24.56941
#62:   Feb 1985-1989 24.48329
#63:   Mar 1985-1989 24.03576
#64:   Apr 1985-1989 22.99553
#65:   May 1985-1989 20.03694
#66:   Jun 1985-1989 17.39600
#67:   Jul 1985-1989 17.69200
#68:   Aug 1985-1989 19.72047
#69:   Sep 1985-1989 20.74494
#70:   Oct 1985-1989 22.22071
#71:   Nov 1985-1989 23.64329
#72:   Dec 1985-1989 23.48376
#    Month    Period     Temp

In the same way, we can get 10 year or other windows.

同样地,我们可以得到10年或其他的windows。

#2


1  

The first part of question Average all januaries, februaries, you can get by -

问题的第一部分是平均所有一月,二月,你可以通过-

monthly_data <- aggregate(df$temp,by=list(strftime(df$date, "%m")),mean) 
cbind(monthly_data[2], Month = month.abb, Period = "1960-1989")

#         x   Month    Period
# 1  23.90506   Jan 1960-1989
# 2  24.40012   Feb 1960-1989
# 3  23.73714   Mar 1960-1989
# 4  21.68584   Apr 1960-1989
# 5  19.53863   May 1960-1989
# 6  17.90322   Jun 1960-1989
# 7  17.97675   Jul 1960-1989
# 8  19.56051   Aug 1960-1989
# 9  20.90125   Sep 1960-1989
# 10 21.96886   Oct 1960-1989
# 11 22.86102   Nov 1960-1989
# 12 22.92537   Dec 1960-1989

The second part getting average for a particular range, you can try

第二部分取某一范围的平均值,你可以试试

from <- 1960
to <- 1964
subset_data <- subset(df, as.numeric(strftime(df$date, "%Y")) %in% from:to)
subset_mothly_data <- aggregate(subset_data$temp,by=list(strftime(subset_data$date, "%m")),mean) 
cbind(Temp = subset_mothly_data[2], Month = month.abb , Period = paste(as.character(from), "-", as.character(to), sep = ""))

# x    Month    Period
# 1  23.45718   Jan 1960-1964
# 2  23.62400   Feb 1960-1964
# 3  23.51200   Mar 1960-1964
# 4  21.45365   Apr 1960-1964
# 5  18.35788   May 1960-1964
# 6  16.80729   Jun 1960-1964
# 7  17.25106   Jul 1960-1964
# 8  19.42329   Aug 1960-1964
# 9  21.80471   Sep 1960-1964
# 10 22.05247   Oct 1960-1964
# 11 22.61035   Nov 1960-1964
# 12 22.32094   Dec 1960-1964

I have shown this for the period 1960 - 1964 . Similarly, you could do this for any given period.

我在1960年到1964年间展示过。类似地,你可以在任何给定的周期内这样做。