首页 > 解决方案 > 为 5 个不同变量的所有可能组合创建平均值

问题描述

我有一个包含 5 个不同变量(例如,a、b、c、d 和 e)的数据集。我想要一个简单的代码(最好使用 tidyverse),它允许我为每个可能的变量组合取平均值。例如,“ab”、“ac”、...的均值,一直到“abcde”。有没有一种简单的方法可以做到这一点?

我所尝试的只是为每个变量手动创建代码。但是,似乎循环之类的东西更合适。

例如,如果我的数据如下所示:

a <- rnorm(10, 0, 1)
b <- rnorm(10, 0, 1)
c <- rnorm(10, 0, 1)
d <- rnorm(10, 0, 1)
e <- rnorm(10, 0, 1)
data <- cbind.data.frame(a,b,c,d,e)

我希望数据看起来像输出,就好像我对 a、b、c、d、e 的每个组合都这样做了:

data$ab <- (data$a + data$b)/2
.
.
.
data$abcde <- (data$a + data$b + data$c + data$d + data$e)/5

标签: r

解决方案


您可以使用 生成组合combn并计算每个组合的均值rowMeans

all.combs <- unlist(lapply(2:ncol(data), function(x) combn(colnames(data), x, simplify = F)), recursive = F)

m <- lapply(all.combs, function(x) rowMeans(data[, x]))
data[sapply(all.combs, paste0, collapse = '')] <- m


# example output
data[, c('ab', 'ac', 'abcde')]
#            ab          ac       abcde
# 1   0.9145668 -0.15422891  0.46534449
# 2   1.0593771  0.36834739 -0.28974715
# 3   0.8504790  0.37486041  0.58032864
# 4   0.8392725  1.67687954  0.62420232
# 5  -0.1612623 -0.31145576  0.06580884
# 6  -0.6140748 -0.05931374 -0.01082605
# 7   0.4424551  0.75504165  0.53706206
# 8  -0.1202238 -0.02772524  0.43865296
# 9  -1.3020701 -0.18290837 -0.61781512
# 10 -0.7414824 -1.56409902 -1.12516693

推荐阅读