为5个不同变量的所有可能组合创建均值

时间:2019-06-02 12:40:23

标签: r

我有一个包含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

1 个答案:

答案 0 :(得分:4)

您可以使用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