计算数据框中每对列之间的 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))
我无法解决在 "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))