计算数据框中每对列之间的 pairwise-difference

Calculate pairwise-difference between each pair of columns in dataframe

我无法解决在 "adat" 中创建每个变量(列)的微分并将其保存到矩阵 "dfmtx".

的问题

我只需要为 "adat" 中的每一列自动执行以下序列 运行 ,然后根据彼此相减并放入的向量的名称来命名获得的向量"dfmtx".

在 "adat" 中,我有 14 列和 26 行,不包括 header。

dfmtx[,1]=(adat[,1]-adat[,1])
dfmtx[,2]=(adat[,1]-adat[,2])
dfmtx[,3]=(adat[,1]-adat[,3])
dfmtx[,4]=(adat[,1]-adat[,4])
dfmtx[,5]=(adat[,1]-adat[,5])
dfmtx[,6]=(adat[,1]-adat[,6])
.....
dfmtx[,98]=(adat[,14]-adat[,14])

如有任何帮助,我们将不胜感激!

如果adat是一个data.frame,你可以使用outer得到列的组合,然后根据[=的索引做列的成对子集之间的差异13=]。目前尚不清楚您是如何获得“98”列的。通过删除对角线和下三角元素,列数将为“91”。

nm1 <- outer(colnames(adat), colnames(adat), paste, sep="_")
indx1 <-  which(lower.tri(nm1, diag=TRUE))
res <- outer(1:ncol(adat), 1:ncol(adat), 
              function(x,y) adat[,x]-adat[,y])
colnames(res) <- nm1
res1 <- res[-indx1]
dim(res1)
#[1] 26 91

数据

set.seed(24)
adat <- as.data.frame(matrix(sample(1:20, 26*14,
                         replace=TRUE), ncol=14))