2017-10-06 5 views
0

私は生物学的配列データをGTF形式で扱っています。ここ形式の簡単な例です:dplyr:存在しない可能性のある行を折りたたむ

start stop type   name 
1  90  exon   transcript_1_exon_1 
12  15  start_codon transcript_1_exon_1 
100  160 exon   transcript_1_exon_2 
190  250 exon   transcript_1_exon_3 
217  220 stop_codon transcript_1_exon_3 

私は彼らのタンパク質配列にエクソンを変換しようとしています。しかし、エキソンの一部はタンパク質をコードしていません。これは、typeフィールドがstart_codonまたはstop_codonに設定された行が存在することによって示されます。

次のように私は、存在する場合、自分の列に、それぞれ、これらの機能の開始と停止を移動したいと思います:

start stop type   name     start_codon stop_codon 
1  90 exon   transcript_1_exon_1 12   NA 
100  160 exon   transcript_1_exon_2 NA   NA 
190  250 exon   transcript_1_exon_3 NA   220 

しかし、私はRでこれを行う方法を見つけ出すことはできません。

gtf3 <- gtf2 %>% group_by(feature_name) %>% summarise(
    start_codon = ifelse(sum(type == "start_codon") != 0, start[type == "start_codon"], NA), 
    stop_codon = ifelse(sum(type == "stop_codon") != 0, stop[type == "stop_codon"], NA)) 

が、これは私に次のエラーを与える:私はdplyrを使用して来ている最も近いですEvaluation error: object of type 'closure' is not subsettable.

はどのようにして、開始と電子を移動することができます開始コドンとストップコドンのそれぞれndは、存在するときにそれぞれの列に入れられますか?ここで

答えて

1

はそれを行うための方法です:

df1 %>% filter(type=="exon") %>% 
    left_join(df1 %>% 
       filter(type=="start_codon") %>% 
       select(-type,-stop),by="name",suffix = c("","_codon")) %>% 
    left_join(df1 %>% 
       filter(type=="stop_codon") %>% 
       select(-type,-start),by="name",suffix = c("","_codon")) 

# start stop type    name start_codon stop_codon 
# 1  1 90 exon transcript_1_exon_1   12   NA 
# 2 100 160 exon transcript_1_exon_2   NA   NA 
# 3 190 250 exon transcript_1_exon_3   NA  220 
関連する問題