如何查找重复的ID并比较行

时间:2014-09-19 11:57:29

标签: r

我有一个非常大的数据帧,其中pair是id,每对都有相关性。存在重复的行,其中同一对可能具有不同的相关性。

我想为同一对绘制corr1与corr2。所以我想我可能要制作一个新的数据帧,然后用corr1 verus corr2绘制。

例如。

  

DF1

  pair rev_pair corr
1  A:B      B:A  0.5
2  B:C      C:B  0.9
3  C:D      D:C  0.5
4  E:F      F:E  1.0
5  A:B      B:A  0.6
6  B:C      C:B  1.0

df_pairs

pair  corr1  corr2
A:B    0.5    0.6
B:C    0.9    1.0

这是我尝试过的脚本。但这是永远的。有没有人有任何建议。

谢谢,

i<-1                    
max_dup_pairs<-(length(Corr_dL[[i]]$corr)+length(Corr_sLdP[[i]]$corr)+length(Corr_sLsP[[i]]$corr))    
dup_pairs<-matrix(nrow=max_dup_pairs,ncol=4)
counter<-1
for (j in 1:dim(ScoreCorr_list[[i]])[1]){ # for each row
for (k in (j+1):dim(ScoreCorr_list[[i]])[1]){ # compare to rows below
    if (ScoreCorr_list[[i]][j,]$pair==ScoreCorr_list[[i]][k,]$pair){
        dup_pairs[i,1]<-ScoreCorr_list[[i]][j,]$corr
        dup_pairs[i,2]<-ScoreCorr_list[[i]][k,]$corr
        dup_pairs[i,3]<-ScoreCorr_list[[i]][j,]$pair
        dup_pairs[i,4]<-ScoreCorr_list[[i]][k,]$pair

    }   
 }  

}
ind <- apply(dup_pairs, 1, function(x) all(is.na(x)))
dup_pairs <- dup_pairs[ !ind, ]
pdf("Corr.duplicatePairsCorr.xy.pdf",width=6.07,height=3.75)
plot(dup_pairs[,1],dup_pairs[,2])
dev.off()

2 个答案:

答案 0 :(得分:1)

如果您需要将df1重塑为df_pairs

  library(reshape2)
  df1$indx <- with(df1, paste0("corr", ave(seq_along(pair), pair, FUN=seq_along)) )
  df_pairs <- dcast(df1, pair~indx, value.var="corr")
   df_pairs[!rowSums(is.na(df_pairs[,-1])),]
  #  pair corr1 corr2
  #1  A:B   0.5   0.6
  #2  B:C   0.9   1.0

您也可以使用data.table

  library(data.table)
  key1 <- c("pair", "rev_pair")
  DT <- data.table(df1, key=key1)
   dcast(DT[DT[duplicated(DT)],][,N:= paste0("corr",1:.N), by= key1], pair~N, value.var="corr")
  #  pair corr1 corr2
  #1  A:B   0.5   0.6
  #2  B:C   0.9   1.0

答案 1 :(得分:1)

删除重复的值后,您可以使用aggregate

dat_dup <- 
dat[duplicated(dat[,1:2]) |  duplicated(dat[,1:2],fromLast = TRUE) ,]
aggregate(corr~pair,data=dat_dup,FUN=I)

   pair corr.1 corr.2
1  A:B    0.5    0.6
2  B:C    0.9    1.0
相关问题