2017-08-02 36 views
0

我有一個數據幀(DF1)在R的長格式約430,000行和4列。我想按文件對觀察進行分組,然後按名稱進行分組,然後按列表定義的特定順序進行排序,然後連接列GT中的值。該表具有以下格式:組的行由兩個變量,按列表排序列值,然後連接

# Assay Name GT file 
# as1 Fred AG file1.csv 
# as2 Fred GT file1.csv 
# as3 Fred TC file1.csv 
# as2 Curt AG file1.csv 
# as1 Curt GG file1.csv 
# as3 Curt TT file1.csv 
# as1 Fred AG file2.csv 
# as2 Fred NA file2.csv 
# as3 Fred TC file2.csv 

所需的輸出應該是這樣的:

# Name GT_concatenated 
# Fred AGGTTC 
# Curt GGAGTT 
# Fred AG TC 

這意味着測定列需要通過這個列表的第一個C進行排序(「AS1」,「AS2 「,」as3「),然後連接。我曾經嘗試這樣做:

這給了我想要的輸出,但不排序,併爲「NA」值沒有空格。

+1

我有一個答案,但我刪除它,因爲我不知道我理解你想要的輸出。 Fred file1行看起來似乎是AGGTTC,但您已將其列爲GTAGGT。這看起來像as2,as1,as3,我不明白。 – HarlandMason

+1

@HarlandMason我會繼續併發布你的答案,因爲它可能是一個錯字。你可以在進一步澄清後編輯你的答案 – CPak

+0

是的,在那一個上打字。我糾正了它。 – CXK

回答

0

每當我被列做數據操作,我想談談data.table

library('data.table') 

DF1 <- as.data.table(DF1) 

讓我們從文件名稱和試驗數據進行排序。它看起來像一個直字母排序得到所需的順序,用倒在你的榜樣名

DF1 <- DF1[order(file, -Name, Assay)] 

創建一個虛擬列,它是在GT的價值,否則一個空間,如果在GT值is.na()

DF1[, GT.space := ifelse(is.na(GT), ' ', GT)] 

執行按名稱

DF1[, .(GT_concatenated = paste(GT.space, collapse='')), by=.(file, Name)] 

倒塌與我的版本的數據,這個輸出

 file Name GT_concatenated 
1: file1.csv Fred   AGGTTC 
2: file1.csv Curt   GGAGTT 
3: file2.csv Fred   AG TC 

如果你真的不想要的文件欄,然後

DF1[, .(GT_concatenated = paste(GT.space, collapse='')), by=.(file, Name)][, .(Name, GT_concatenated)] 

產生

Name GT_concatenated 
1: Fred   AGGTTC 
2: Curt   GGAGTT 
3: Fred   AG TC