我有一个如下样式的数据框架:
Year <- 1948:2017
Jan<- rnorm(70)
Feb<- rnorm(70)
Mar<- rnorm(70)
Apr<- rnorm(70)
May<- rnorm(70)
Jun<- rnorm(70)
Jul<- rnorm(70)
Aug<- rnorm(70)
Sep<- rnorm(70)
Oct<- rnorm(70)
Nov<- rnorm(70)
Dec<- rnorm(70)
test_df <- cbind.data.frame(Year, Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec)
head(test_df)
########Console result
Year Jan Feb Mar Apr
1 1948 -0.5918300 0.0497792 -0.9302350 0.73162688
2 1949 -1.2731259 0.8933090 0.2340527 1.03077077
3 1950 -0.3727786 -0.5680272 1.4439980 0.53150414
4 1951 0.6520741 -1.4229818 -0.9700416 -0.07151535
5 1952 0.4296101 -0.2294352 1.0863566 1.58652232
6 1953 0.3334147 -0.5386016 1.3432490 1.91005906
May Jun Jul Aug
1 0.28268233 0.7870373 -0.06178119 -0.14469371
2 -0.02048683 -1.4834607 -0.17926819 -0.38662117
3 0.24659095 0.4929837 0.79430914 0.03486687
4 -0.60123934 1.1304690 -0.13452649 -1.07814801
5 1.39161546 0.6827090 0.54729206 0.50188908
6 -0.53882956 -0.3246258 0.09602686 -2.35509441
Sep Oct Nov Dec
1 2.0492817 0.6185466 2.0427045 -0.06097253
2 0.7804505 -0.3416864 -1.5192509 2.01911948
3 1.9193976 -0.3120360 1.5646020 -0.04911313
4 -0.1147404 -0.3593639 0.5186583 1.39936930
5 2.4481574 -1.2349037 -0.3519640 0.58429371
6 0.6639531 -0.4471403 0.7071486 -1.02036467
我需要对随机月份进行分组,如JanFeb
,JanMar
或AprFeb
或MarMayNov
,如下所示。月份的分组可以是任何东西(许多可能性和组合)。当我对这几个月进行分组时,它们的值应该是平均值,例如JanFeb
的值应该是Jan
和Feb
的值的平均值,或者MarMayNov
的值应该是Mar
、Nov
和May
的平均值。如何解决这个问题?任何帮助都是感激的。谢谢。
编辑
为简单起见,假设我只想分组2个月或最多3个月,不要超过2个月。
我们可以使用lapply
和combn
创建所有可能的名称组合。对于每个组合,找出一列中所选列的平均值,并将这些列组合在一个数据框中。
cols <- names(test_df)[-1]
result <- do.call(cbind, lapply(2:length(cols), function(x)
do.call(cbind, combn(cols, x, function(y)
setNames(data.frame(rowMeans(test_df[y])),
paste0(y, collapse = "")), simplify = FALSE))))
如果最多只合并3个月,则将lapply
中的2:length(cols)
改为2:3
。