计算数据帧中每对列之间的成对差异

时间:2015-01-28 08:08:15

标签: r dataframe

我无法解决在“adat”中创建每个变量(列)的差异并将其保存到矩阵“dfmtx”的问题。

我只需要自动执行以下序列来为“adat”中的每一列运行,然后根据彼此相减的名称命名所获得的矢量并将其放入“dfmtx”列中。 / p>

在“adat”中,我有14列和26行,不包括标题。

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])

任何帮助将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:6)

如果adat是data.frame,您可以使用outer获取列的组合,然后根据outer的索引在列的成对子集之间区别。目前尚不清楚你是如何获得“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))