2015-01-09 63 views
1

我想合併兩個數據集。兩者具有相同的ID,具有不同結果的相同行合併data.frames導致錯誤

data<-read.table(file="file.profile", header=T) 
data$PHENO<-data$PHENO-1 
data$ID<-paste(data$FID,":",data$IID, sep="") 

> head(data) 
     FID IID PHENO CNT CNT2 SCORE ID 
    1 FID1 10  0 10000 100 0.01 FID1:10 
    2 FID2 10  0 10000 100 0.01 FID2:10 

> cov<-read.table(file="cov.txt", header=T) 
> cov$ID<-paste(cov$FID,":",cov$IID, sep="") 

> head(cov) 
    FID IID COV1 COV2 COV3 COV4 COV5 COV6 COV7 PHENO ID 
1 FID1 10 0 0 0.101 0.10 0.22 2 179  222 FID1:10 
2 FID2 10 0 0 0.102 0.10 0.23 2 176  222 FID2:10 

> data<-merge(cov,data,by.x="ID", by.y="ID", all=T) 

> head(data) 
     ID FID.x IID.x COV1 COV2 COV3 COV4 COV5 COV6 COV7 PHENO.x 
1 FID1:10 FID1 10 0 0 0.101 0.10 0.22 2 179  222 
2 FID2:10 FID2 10 0 0 0.102 0.10 0.23 2 176  222 
    FID.y IID.y PHENO.y CNT CNT2  SCORE 
    FID1 10  0 10000 100 0.01 
    FID2 10  0 10000 100 0.01 

爲什麼我將「.x」和「.y」添加到我的列中?我怎樣才能避免這種情況?

非常感謝

回答

1

如果兩個數據幀都相同名字列,merge(),將添加xy的列名,以確定從哪個數據集他們來到。

在這裏,您在datacov中都有一個名爲FIDIID的列;結果,FID.xIID.x來自cov數據幀,而FID.yIID.y來自data數據幀。

您可以通過在兩個數據集中都有唯一的列名來避免這種情況。

+0

但我試圖合併它使用一個特定列作爲參考,doesn;噸幫助?你有一個建議如何避免前綴.x/.y列名? – nbn

+0

@Guest你可以使用'unique','setdiff'等來對子列進行子集合並然後'merge' – akrun

+1

好吧,謝謝Steven和akrun,它使用uniq列名。 – nbn