r - 为 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
解决方案
您可以使用 生成组合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
推荐阅读
- html - 用于在两个 div 类之间交替的 Twig 规则
- android - 具有复合键的android房间中的实体中不存在主键
- guava - Guava Splitter 生成具有设定值的地图
- spring - @Conditional 配置 - Spring 找不到我的 bean
- python - Python + Selenium StaleElement 与循环和点击
- python - vscode 无法识别我的 django 模块应用程序。来自 vscode 的警告
- java - 使用数据绑定从编辑文本中获取字符串值
- javascript - 取消 componentWillUnmount 中的所有订阅
- mysql - 需要帮助在位列上对 MySQL 表进行分区,并在结果分区上进行子分区
- python - 在具有相同特征的不同模型中聚合特征重要性的最佳方法是什么?