计算所有变量与所有其他变量的差值

Calculating the difference of all variables to all other variables

提问人:Sulz 提问时间:5/13/2022 更新时间:5/13/2022 访问量:42

问:

假设我的 Dataframe 如下所示:

w <- sample(-10:10, size =10)
x <- sample(-10:10, size =10)
y <- sample(-10:10, size =10)
z <- sample(-10:10, size =10)
df <- data.frame(w,x,y,z)

现在我想计算每列与所有其他列的差值 (|w-x|)。所以我希望它像示例一样,但也要w_z列,x_y、y_z、y_z......(我的原始 df 还有更多变量)

df$w_x <- abs(df$w-df$x)
df$w_y <- abs(df$w-df$x)

或者,如果有更简单的解决方案,则可以计算到新的 df / 矩阵。提前致谢。

R 矩阵

评论

2赞 Maël 5/13/2022
这回答了你的问题吗?R - 如何生成数据框中所有列组合的差值
0赞 Sulz 5/13/2022
是的!对不起,我没有找到。

答:

2赞 akrun 5/13/2022 #1

这是一个方法combn

nm1 <- combn(names(df), 2, FUN = paste, collapse = "_")
df[nm1] <- combn(df, 2, FUN = function(x) abs(x[[1]]- x[[2]]))

-输出

> df
     w  x  y   z w_x w_y w_z x_y x_z y_z
1    7  3 -2   6   4   9   1   5   3   8
2   -6  6  7   0  12  13   6   1   6   7
3   -8  0 -7   8   8   1  16   7   8  15
4    9 -9 -4  -2  18  13  11   5   7   2
5    5 -3  5  -4   8   0   9   8   1   9
6    2 -6 -8 -10   8  10  12   2   4   2
7   -5  7  2  -9  12   7   4   5  16  11
8    3 -2  4  -6   5   1   9   6   4  10
9  -10 -4  9   9   6  19  19  13  13   0
10   8  5 10   4   3   2   4   5   1   6