2016-01-20 70 views
0

好吧最好file1中,所以這將是難以解釋的。請隨身攜帶,並根據需要提出儘可能多的問題。如何匹配和排序的文件2行中的R

我有兩個文件。每個文件都包含一定數量的行和列。每個文件中的第二列包含一個唯一的GENE ID,它們在兩個文件中都是相同的(它們只是在不同的行中)。因此,例如,

文件1可能在第3行(在第二列)中具有基因「LINC00273」,而文件2在第4002行(在第二列中)可能具有「LINC00273」。

我想要做的是我想對文件2進行排序,以便如果文件1行1中的第一個GENE是「VAGAB」,那麼文件2行1的第一個GENE是整個行的「VAGAB」完好無損(該行有覆蓋信息,所以我需要相應地移動數字)。

例如:文件1 [#]對應於行數

[1] GENE100X VAGAB VAGAB 1.0 1.0 1.0 5.0 11198.0 
... 
[5000] GENE900X ZZZZ ZZZZ 1.0 0 4.2 1.0 78.0 

文件2

[1] GENE44X AAAA AAAA 1.0 1.0 1.0 1.0 1.0 
... 
[5000] GENE106X VAGAB VAGAB 5.0 5.0 5.0 1.0 55.0 

文件2所述的預期的輸出將是:

[1] GENE106X VAGAB VAGAB 5.0 5.0 5.0 1.0 55.0 
... 
[5000] GENE300X ZZZZ ZZZZ 88.0 88.0 1.0 1.0 1.0 

所有文件是製表符分隔的。示例中的所有數字(行號和列號)都由它們組成。唯一不會改變的列是第2列和第3列,這兩個文件都是相同的,所以我想用這些排序。

我不想創建第三個文件,如果能有所幫助。我只是希望文件2中的行與文件1中的行相同,並且執行此操作的方法是通過兩個文件的第2列中找到的「基因」名稱來匹配它們。

[R解決方案的首選因爲這是我正在學習,但我會採取任何解決方案中的任何語言,然後我就可以使用它作爲模板來與我自己的R解決方案的實踐之後。

+0

這不只是一個'merge'? – thelatemail

+0

我不想創建第三個文件,我只是試圖重新排序我已有的第二個文件。我並不是100%熟悉合併功能的,只是我現在從幫助頁面讀到的內容。 – System

+0

我嘗試過,但沒有合併不會做我想做的事情。 – System

回答

2

讓我們建立了一些示例數據第一:

file1 <- data.frame(id=1:3,name=letters[c(3,1,2)]) 
# id name 
#1 1 c 
#2 2 a 
#3 3 b 

file2 <- file1[c(2,3,1),] 
file2$id <- paste("two",file2$id,sep="") 
# id name 
#2 two2 a 
#3 two3 b 
#1 two1 c 

然後用01匹配行:

file2[match(file1$name,file2$name),] 
# id name 
#1 two1 c 
#2 two2 a 
#3 two3 b 

基本上是一樣的合併所有針對file1數據的匹配行file2數據。

merge(file1["name"], file2, by="name", sort=FALSE) 
# name id 
#1 c two1 
#2 a two2 
#3 b two3 
+0

我想我錯誤地使用了合併功能,我應該花更多時間閱讀文檔。這似乎只是通過查看前幾行數據就可以工作。如果我想將這些數據寫入文件,我是否會簡單地使用write.table命令? – System

+0

@System - 它有一些細微之處 - 'sort = FALSE'對於某些情況有點有趣,所以'match'可能對你很理想。如果你喜歡使用'write.table/csv',你可以寫出來。 – thelatemail

+0

目前一切看起來不錯。某些列ID被重新排序,但這並不是awk快速修復所無法解決的問題。我已經接受了這個答案! – System

1

負荷(下面使用樣本數據)這兩個文件到數據幀。

file1 <- data.frame(id=1:3,name=letters[c(3,1,2)]) 
file2 <- file1[c(2,3,1),] 

然後你就可以定義排序順序與因素:

file1$name <- factor(file1$name, levels = file1$name) 
file2$name <- factor(file2$name, levels = file1$name) 

然後排序文件2:

file2 <- file2[with(file2, order(name)) , ] 
+0

這似乎並沒有保留所有的信息其他欄目。這是預期的嗎? – System

+0

所以我重新嘗試了這一點,我設法保留了所有的信息。但它沒有正確排序。它似乎根據A - > Z列2個名稱進行排序,而不是將它們排序到文件1中的名稱。 – System

+0

好的,我已經在上面編輯了它,現在它可以工作。那是你的追求? – Mist