2017-10-06 82 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_codonstop_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中做到這一點我已經使用dplyr前來最接近的是:

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

,但是這給了我以下錯誤:Evaluation error: object of type 'closure' is not subsettable.

我如何可以移動開始和e當啓動/終止密碼子存在時,它們分別放入它們自己的列中嗎?

回答

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