1

我有以下方式的数据框:

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

我需要对随机月份进行分组,例如JanFebJanMarAprFebMarMayNov, 像这样。月份的分组可以是任何东西(许多可能性和组合)。当我对这几个月进行分组时,它们的值应该是平均值,例如,JanFeb值应该是和的值的平均值,Jan或者FebMarMayNov应该是和MarNov平均值May。如何解决这个问题?任何帮助表示赞赏。谢谢。

编辑

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

4

1 回答 1

3

我们可以使用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 个月,请更改2:length(cols)2:3in lapply

于 2021-09-29T06:49:23.183 回答