【发布时间】:2015-04-20 15:23:31
【问题描述】:
我有以下data.frame
Tipo Start End Strand Accesion1 Accesion2
1 gene 197 1558 + <NA> SP_0001
2 CDS 197 1558 + NP_344554 <NA>
3 gene 1717 2853 + <NA> SP_0002
4 CDS 1717 2853 + NP_344555 <NA>
5 gene 2864 3112 + <NA> SP_0003
6 CDS 2864 3112 + NP_344556 <NA>
还有更多的“Tipo”值,例如 tRNA、region、exon 或 rRNA,但我只对结合这两个感兴趣,gene 和 CDS
我想得到以下内容
Start End Accesion1 Accesion2
1 197 1558 NP_344554 SP_0001
但仅当基因和 CDS 的 start 和 End 值一致时。我尝试使用 dplyr 使用 select、arrange 和 mutate,但摆脱 NA 对我来说有点复杂
【问题讨论】:
-
您可能需要提供更多详细信息,关于
gene/CDS是否成对出现。目前尚不清楚,因为您提到还有其他值tRNA, region, exon等。假设,如果df1$Start[6] <- 2964示例数据集的预期结果是什么 -
是的,它们成对出现您提供的解决方案似乎效果很好。因为存在一些额外的 Tipo,所以会出现一些 NA,但我可以使用 complete.cases 轻松丢弃它们。我正在寻找 dplyr 的解决方案,只是因为我喜欢它。但是解决方案(你删除了?)效果很好
-
你能检查一下这是否有效
library(data.table);setDT(df1)[, id:=cumsum(Tipo == 'gene')][,list(Accesion1=na.omit(Accesion1), Accesion2=na.omit(Accesion2)) , list(id, Start, End)] -
是的,它工作得很好。我得到了同样的结果