我无法解决在“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])
任何帮助将不胜感激,谢谢!
答案 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))