【问题标题】:How can I sort a DNAStringSet object?如何对 DNAStringSet 对象进行排序?
【发布时间】:2019-04-13 01:18:46
【问题描述】:

我有一个 xstringset 对象

 A DNAStringSet instance of length 151674
          width seq                                                                names               
    [1]     253 GAACAGCATGAATGTTAAAACTGAAATGGATG...TGATGGTTAGGTTTTCAGAAAAAGCAGAAGA LGKD01000001.1 Oc...
    [2]  150158 TATATATATATAGTCAATTCGAGGATGTTAGA...TCCGGATACTATTCCAGAGTTTCCTTGCAAA KQ415657.1 Octopu...
    [3]     619 ATAGACATACACACAAATATTTTTATATCACA...TATATACATATTTATACATATATATATATAT LGKD01000030.1 Oc...
    [4]     359 TCACCAGTGGCAGCCGCGGCTACAGCAAAAGG...CACGGGCTGTACAACGACCCTGATGACTCCG LGKD01000031.1 Oc...
    [5]     239 GAAGTGGTAAAGAGTGCGATGCGCTGAAAAAA...CTCTTTTTTCAGCGCATCGCACTCTTTACCA LGKD01000032.1 Oc...
    ...     ... ...
[151670]    2021 AAAACCTAAACATGTTAAATCAGAGATTGCAA...ATATATAAGTATATATATATATATATATATA KQ434080.1 Octopu...
[151671]     420 CCCCACCTCCACTATCAACACCACTACCACCA...GAAGAAGAAGAAGAAGAAGAAGAAGAAGAAG LGKD01700121.1 Oc...
[151672]     424 ACACACACACACACACACACACATATACATAT...GTAAATGTGTCCGTGTGTAGTAAGCATGTGT LGKD01700122.1 Oc...
[151673]     242 ATATATATATATATATATACATCAACATATAT...ATATGTAGACGTGTGTGTATATATATATATA LGKD01700123.1 Oc...
[151674]     214 CACACACACACACACACACACACACACACACA...ACTCATATGTACAACACACATTTATACGCTT LGKD01700124.1 Oc...
>  

我按降序排序得到这个:

> sort_oc=sort(width(oc), decreasing = TRUE)

> sort_oc[1:10]
[1] 4064693 3315273 3181678 3174068 2987449 2908116 2784626 2705535 2686354 2631168

如何获取排序得到的每个宽度对应的字符串?

例如,我希望得到这样的结果:

          width   seq                                                                names               
     [567] 4064693 GAACAGCATGAATGTTAAAACTGAAATGGATG...TGATGGTTAGGTTTTCAGAAAAAGCAGAAGA  LGKD01000001.1 Oc...           
     [350] 3315273 AAAACCTAAACATGTTAAATCAGAGATTGCAA...ATATATAAGTATATATATATATATATATATA KQ434080.1 Octopu... 

等等

【问题讨论】:

  • 如果所有字符串的宽度都不同,您可以尝试left_join。比如sort_oc %>% left_join(df_DNA, by = "width")
  • 您是否尝试根据您的width 列按降序对数据框进行排序?如果是这样,这是否满足您的需求?例如,oc[order(oc$width, decreasing = T),]
  • 安德鲁,我认为您的建议可能是解决方案,但没有奏效。 oc[order(oc$width, decreasing =T),] Error in order(..., decreasing = T) : argument 1 is not a vector

标签: r bioconductor


【解决方案1】:

Andrew's 答案非常接近,但由于 DNAStringSet 不是 data.frame,您需要使用 Biostrings::width 函数来获取宽度:

oc[order(width(oc), decreasing = T),]

这将返回相同的DNAStringSet 对象,按宽度降序排列

【讨论】:

  • @jonny 如果有帮助,请考虑接受作为答案。
  • @divibisan 如果我要选择宽度 => 1000 的字符串,是否正确 oc[filter(width(oc), => 1000),]
  • 不,你会做oc[width(oc) <= 1000,]width(oc) 用每个序列的宽度创建一个数字向量。当您使用大于/小于运算符进行比较时,您会得到一个逻辑 (TRUE/FALSE) 向量,说明条件是否适用于可用于子集行的每个序列。 dplyr::filter 用于而不是 方括号子集,而不是与它一起使用。二、你要的运营商是>=<=,不知道你要的是哪一个
猜你喜欢
  • 1970-01-01
  • 2013-07-08
  • 1970-01-01
  • 1970-01-01
  • 2012-12-26
  • 1970-01-01
  • 2013-12-05
  • 2013-07-03
  • 2013-01-06
相关资源
最近更新 更多