2017-08-02 4 views
0

Rのデータフレーム(DF1)は〜430,000行と4列のロング形式です。私は観測値をファイル、次に名前でグループ分けし、続いてリストで定義された特定の順序でソートし、列GTの値を連結したいと考えています。表の形式は:列を2つの変数でグループ化し、列の値をリスト順にソートして連結します。

# 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 

所望の出力は次のようになり:アッセイ列このリスト最初C(「AS1」、「AS2によってソートされる必要があることを意味する

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

"、" as3 ")、連結されます。私はこれを試してみました:

これは私に望ましい出力を与えますが、ソートされておらず、 'NA'値のための空白もありません。

+1

、その後、ファイルの列を使用しない場合、私は答えを持っていたが、私は、私はあなたの希望を理解していないとして、私はそれを削除出力。 Fred file1の行はAGGTTCであると思われますが、GTAGGTとしてリストしています。これはas2、as1、as3のように見えますが、私は理解しません。 – HarlandMason

+1

@HarlandMasonこれは誤字かもしれないので、私はあなたの答えを投稿するつもりです。あなたの答えをさらに解明すると編集できます – CPak

+0

はい、それを入力してください。私はそれを訂正した。 – CXK

答えて

0

私は列でデータ操作を行うたびに、私はのは、ファイル、名前およびアッセイによってデータをソートしてみましょう

library('data.table') 

DF1 <- as.data.table(DF1) 

をdata.tableすることにします。ストレートアルファベット順の並べ替えがあなたの例のように反転した名前で、目的の順序を与えるように見えます

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)] 

によって崩壊を行い、これは

を出力します3210
 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 
関連する問題