我有一个非常大的数据帧,其中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()
答案 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