如何在r中对数据框架中的月份列进行分组



我有一个如下样式的数据框架:

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,JanMarAprFebMarMayNov,如下所示。月份的分组可以是任何东西(许多可能性和组合)。当我对这几个月进行分组时,它们的值应该是平均值,例如JanFeb的值应该是JanFeb的值的平均值,或者MarMayNov的值应该是MarNovMay的平均值。如何解决这个问题?任何帮助都是感激的。谢谢。

编辑

为简单起见,假设我只想分组2个月或最多3个月,不要超过2个月。

我们可以使用lapplycombn创建所有可能的名称组合。对于每个组合,找出一列中所选列的平均值,并将这些列组合在一个数据框中。

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

相关内容

  • 没有找到相关文章

最新更新