R 从数据帧中统计不相等数字的出现次数
我有一个数据框df,有四列。我想找出每对行的不相等数 我试着用for循环来实现它,结果非常完美。然而,它需要很长时间才能运行。请看下面我的代码: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假设矩阵是对称
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个度量(或下对角线);这是第三列中的内容。