r - 使用 mutate 计算表的 6 列之间的所有绝对差异?
问题描述
我有一个包含 6 列 Z1 到 Z6 的表,我想计算每列之间差异的绝对值。
到目前为止,我列举了 mutate 命令中的所有差异:
FactArray <- FactArray %>% mutate(diff12 = abs(Z1-Z2),
diff13 = abs(Z1-Z3),
diff14 = abs(Z1-Z4),
diff15 = abs(Z1-Z5),
diff16 = abs(Z1-Z6),
diff23 = abs(Z2-Z3),
diff24 = abs(Z2-Z4),
diff25 = abs(Z2-Z5),
diff26 = abs(Z2-Z6),
diff34 = abs(Z3-Z4),
diff35 = abs(Z3-Z5),
diff36 = abs(Z3-Z6),
diff46 = abs(Z4-Z6),
diff56 = abs(Z5-Z6))
但我意识到这很容易出错,如果我有不同数量的列,就必须重写。
有没有办法“自动”做到这一点?我的意思是,如果我考虑任意数量的列,它会自行调整?
最好的,
达米安
解决方案
combn
您可以使用并减去它们来生成所有可能的列组合。
cols <- paste0('Z', 1:6)
combn(cols, 2, function(x) abs(df[[x[1]]] - df[[x[2]]]))
这里使用了一个小的可重现示例,还添加了适当的列名。
set.seed(123)
df <- data.frame(Z1 = sample(10, 4), Z2 = sample(10, 4), Z3 = sample(10,4))
cols <- paste0('Z', 1:3)
new_cols <- combn(cols, 2, paste0, collapse = "_")
df[new_cols] <- combn(cols, 2, function(x) abs(df[[x[1]]] - df[[x[2]]]))
df
# Z1 Z2 Z3 Z1_Z2 Z1_Z3 Z2_Z3
#1 3 6 6 3 3 0
#2 10 5 9 5 1 4
#3 2 4 2 2 0 2
#4 8 10 3 2 5 7
推荐阅读
- excel - 在 Excel VBA Sub 中读取变量 DAO.QueryDef
- c# - 我无法从 uwp App 中的 ID3 标签读取信息
- hadoop - 多个元存储服务器的 Apache Hive 多个 hive-site.xml
- html - 为什么我的复选框没有正确对齐?百里香叶
- c# - 在并行处理循环中使用单线程对象列表
- postgresql - setval 和 alter sequence restart 命令之间的区别
- mysql - Mysql order by 从 1,000,000 行开始很慢,我们有近 300,000 个搜索结果
- ios - 在通话套件中接听来电未启动
- android - 未捕获的 SyntaxError:存在 async/await 时出现意外标识符
- java - Android OpenCV JavaCamera2View 初始化失败