2015-01-09 3 views
1

Я пытаюсь объединить два набора данных. Оба имеют одинаковые идентификаторы, одни и те же строки с разными результатамиОбъединить 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() будет добавьте к x или y имена столбцов, чтобы определить, из которого набор данных они пришли.

Здесь у вас есть столбец с именем FID и IID в обоих data и cov; в результате FID.x и IID.x взяты из кадра данных cov и FID.y и IID.y взяты из кадра данных data.

Вы избегаете этого, имея уникальные имена столбцов на обоих наборах данных.

+0

Но я пытаюсь объединить его, используя один конкретный столбец в качестве ссылки, doesn; t, который поможет? Есть ли у вас предложение, как я могу избежать префикса .x/.y для имен столбцов? – nbn

+0

@Guest Вы можете использовать 'unique',' setdiff' и т. Д. Для подмножества столбцов, а затем 'merge' – akrun

+1

ah okay, спасибо Steven и akrun, он работал с именами столбцов uniq. – nbn

Смежные вопросы