2014-09-19 37 views
0

我有一個非常大的數據幀,其中對是id,每對具有相關性。有重複的行,其中同一對可能有不同的關聯。如何查找重複的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() 
+0

很好,謝謝,這工作 – user2814482 2014-09-19 12:40:50

回答

1

如果需要重塑df1df_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

您可以刪除重複值後使用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 
+0

+1我想我錯過了重複的部分:-) – akrun 2014-09-19 12:30:03

+0

感謝。我只是檢查了?彙總和谷歌,我無法弄清楚什麼FUN =我的意思? – user2814482 2014-09-19 13:19:13

+0

很好的問題。 FUN = I,功能我喜歡**身份**。這是告訴聚合函數,不對分組行進行任何操作 – agstudy 2014-09-19 13:22:36