Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
计算dataframe中每对列之间的成对差异_R_Dataframe - Fatal编程技术网

计算dataframe中每对列之间的成对差异

计算dataframe中每对列之间的成对差异,r,dataframe,R,Dataframe,我无法回避创建adat中每个变量列的差分并将其保存到矩阵dfmtx的问题 我只需要自动为adat中的每一列运行以下序列,然后根据相互减去的向量的名称命名获得的向量,并将其放入dfmtx的一列中 在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中每个变量列的差分并将其保存到矩阵dfmtx的问题

我只需要自动为adat中的每一列运行以下序列,然后根据相互减去的向量的名称命名获得的向量,并将其放入dfmtx的一列中

在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])
任何帮助都将不胜感激,谢谢

如果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
数据 如果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
数据
@akrun Lower或upper triangle ex对角线将有91个条目,否?@Avraham是的,但在显示的代码中,OP已经使用了对角线元素,即第一行,这让人困惑me@akrun除对角线外的下三角形或上三角形将有91个条目,否?@Avraham是的,但在显示的代码中,OP已经使用了对角线元素,即第一行,这让我觉得很困惑,它工作得很好!现在,我只需要解决将原始列的名称相互减去后排列到新数据框的列中的问题。你对此有什么想法吗?再次非常感谢。@IstvanGaborHatvani对代码做了一些修改,使res1 colnames成为差异中涉及的名称的组合。res1的第一列将以adat的第一列和第二列(如a&B)命名。它们所创建的列的名称from@IstvanGaborHatvani我的代码你可以在nm1中更改sep参数以反映这些更改谢谢你,它工作得很好!现在,我只需要解决将原始列的名称相互减去后排列到新数据框的列中的问题。你对此有什么想法吗?再次非常感谢。@IstvanGaborHatvani对代码做了一些修改,使res1 colnames成为差异中涉及的名称的组合。res1的第一列将以adat的第一列和第二列(如a&B)命名。它们所创建的列的名称from@IstvanGaborHatvani我的代码将类似于A_B。您可以在nm1中更改sep参数以反映这些更改