我有一个包含 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))
但我意识到这很容易出错,如果我有不同数量的列,则必须重写。
有什么方法可以“自动”执行此操作吗?我的意思是,如果我考虑任意数量的列,它会自行调整?
Best,
Damien
您可以使用生成所有可能的列组合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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)