Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.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
R 从数据帧中统计不相等数字的出现次数_R_Distance - Fatal编程技术网

R 从数据帧中统计不相等数字的出现次数

R 从数据帧中统计不相等数字的出现次数,r,distance,R,Distance,我有一个数据框df,有四列。我想找出每对行的不相等数 我试着用for循环来实现它,结果非常完美。然而,它需要很长时间才能运行。请看下面我的代码: dist_mat <- matrix(0, nrow(df), nrow(df)) for(i in 1:nrow(df)) { for(j in 1:nrow(df)) { dist_mat[i,j] <- sum(df[,1:4][i,]!=df[,1:4][j,]) } } dist_mat假设矩阵是对称

我有一个数据框df,有四列。我想找出每对行的不相等数

我试着用for循环来实现它,结果非常完美。然而,它需要很长时间才能运行。请看下面我的代码:

dist_mat <- matrix(0, nrow(df), nrow(df))
for(i in 1:nrow(df))
{
  for(j in 1:nrow(df))
  {
    dist_mat[i,j] <- sum(df[,1:4][i,]!=df[,1:4][j,])  
  }  
}

dist_mat假设矩阵是对称的,对角线为零,您不需要在每行上循环两次,这样就可以将循环减少一半以上:

for(i in 1:(nrow(df)-1))
{
  for(j in (i+1):nrow(df))
  {
    dist_mat[i,j] <- sum(df[i,1:4]!=df[j,1:4])  
  } 
}

dist_mat[lower.tri(dist_mat)] <- dist_mat[upper.tri(dist.mat)]
for(i在1中:(nrow(df)-1))
{
对于(j in(i+1):nrow(df))
{

dist_mat[i,j]这是一项针对
combn
的工作:

DF <- data.frame(x=rep(1,6), y=rep(1:2,3))

combn(seq_len(nrow(DF)), 2, FUN=function(ind, df) {
  c(ind[1], ind[2], sum(df[ind[1],]!=df[ind[2],]))  
}, df=as.matrix(DF))

DF谢谢你的回答。我已经考虑过这种方法。由于我接下来要执行的步骤,我需要生成整个矩阵。@Chris它确实生成整个矩阵,但由于它是对称的,你只需要做一半,然后复制它。谢谢你的回答。这是正确的,如果不是因为我的原因,dist会节省我的时间距离度量。如果我遗漏了什么,很抱歉,但我不理解你的答案。我希望有一个包含成对距离的
6 x 6
矩阵。但是
df
生成的是
3 x 15
矩阵。你能解释一下你的答案吗?谢谢!你在上面有15个度量(或下对角线);这是第三列中的内容。