Создайте среднее значение для всех возможных комбинаций 5 различных переменных - PullRequest
1 голос
/ 02 июня 2019

У меня есть набор данных с 5 различными переменными (например, a, b, c, d и e).Я хочу иметь простой код (предпочтительно с тидиверсом), который позволит мне взять среднее значение для каждой возможной комбинации переменных.Например, среднее значение «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,д, е:

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

1 Ответ

4 голосов
/ 02 июня 2019

Вы можете генерировать комбинации с помощью 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...