【问题标题】:Deal with the output of `str_locate_all` in tibble处理 tibble 中 `str_locate_all` 的输出
【发布时间】:2021-07-08 15:01:46
【问题描述】:

我在字符序列中寻找主题。一旦我找到它们,我想用序列中基序的位置绘制一个图(x - 序列的长度(总是 100),y - 序列给定位置上的基序数)。

我的想法是创建一个包含 100 列(序列长度)的表格,将在主题位置的位置填充例如“1”。

我从表格开始,其中有序列的ID,以及包含序列的seq

table <- tibble(id = c("AT1", "AT2", "AT3"),
                seq = c("AAGCCCATTTAGGGTTTTTTTTAAGCCCAGACCCGGACTCTAATTGCTCCGTATTCTTCTTCTCTTGAGAGGGTTTAAGAGAGAGTTTTTTTGAGAGC",
                        "AACTTGGCCCAAAAAAAAGCCCATTTAGGGTTAAAACAGTAGCAAAAAAACGGACTCTAATTGCTCCGTATTCTTTAGGGTTTGAGAGATTTTTTTAA",
                        "GTTTTTTTAGGGTTTAGTTAAAAAAATAGCAGGGTTTAGGACTCTAATTTAGGGTTATTCTTCTTCTCTTGAGAGAGATTTTTTTAGGGTAGAGCTAGCA"))

然后,我使用str_locate_all 查找声明的主题(AAAAAAATTTTTTT(我想找到所有主题的位置):

table2 <- table %>% 
  mutate(AAAAAAA = str_locate_all(seq, "AAAAAAA")) %>%
  mutate(TTTTTTT = str_locate_all(seq, "TTTTTTT")) 

不幸的是,只有 startend 主题的位置:

# A tibble: 3 x 4
  id    seq                                                                                                  AAAAAAA           TTTTTTT          
  <chr> <chr>                                                                                                <list>            <list>           
1 AT1   AAGCCCATTTAGGGTTTTTTTTAAGCCCAGACCCGGACTCTAATTGCTCCGTATTCTTCTTCTCTTGAGAGGGTTTAAGAGAGAGTTTTTTTGAGAGC   <int[,2] [0 × 2]> <int[,2] [2 × 2]>
2 AT2   AACTTGGCCCAAAAAAAAGCCCATTTAGGGTTAAAACAGTAGCAAAAAAACGGACTCTAATTGCTCCGTATTCTTTAGGGTTTGAGAGATTTTTTTAA   <int[,2] [2 × 2]> <int[,2] [1 × 2]>
3 AT3   GTTTTTTTAGGGTTTAGTTAAAAAAATAGCAGGGTTTAGGACTCTAATTTAGGGTTATTCTTCTTCTCTTGAGAGAGATTTTTTTAGGGTAGAGCTAGCA <int[,2] [1 × 2]> <int[,2] [2 × 2]>

这里我卡住了,因为我不知道如何从主题列中提取值。我考虑创建如下输出(拆分主题列以分隔data.frames,然后填充startend 之间的位置:

AAAAAAA <- matrix(nrow = 3, ncol = 100)
row.names(AAAAAAA) <- c("AT1", "AT2", "AT3")
AAAAAAA[2, c(11:17, 44:50)] <- 1
AAAAAAA[3, c(20:26)] <- 1

    [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16] [,17] [,18] [,19] [,20] [,21] [,22] [,23] [,24] [,25] [,26] [,27] [,28] [,29] [,30] [,31] [,32] [,33]
AT1   NA   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA
AT2   NA   NA   NA   NA   NA   NA   NA   NA   NA    NA     1     1     1     1     1     1     1    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA
AT3   NA   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA     1     1     1     1     1     1     1    NA    NA    NA    NA    NA    NA    NA
    [,34] [,35] [,36] [,37] [,38] [,39] [,40] [,41] [,42] [,43] [,44] [,45] [,46] [,47] [,48] [,49] [,50] [,51] [,52] [,53] [,54] [,55] [,56] [,57] [,58] [,59] [,60] [,61] [,62] [,63] [,64] [,65]
AT1    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA
AT2    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA     1     1     1     1     1     1     1    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA
AT3    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA
    [,66] [,67] [,68] [,69] [,70] [,71] [,72] [,73] [,74] [,75] [,76] [,77] [,78] [,79] [,80] [,81] [,82] [,83] [,84] [,85] [,86] [,87] [,88] [,89] [,90] [,91] [,92] [,93] [,94] [,95] [,96] [,97]
AT1    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA
AT2    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA
AT3    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA
    [,98] [,99] [,100]
AT1    NA    NA     NA
AT2    NA    NA     NA
AT3    NA    NA     NA

然后我想将所有表合并成一个大表并使用ggplot 进行绘图。

我描述了整个问题,因为我不确定我是否能以一种好的方式解决它,并且希望获得有关如何“提取”/“简化”str_locate_all 输出的任何提示或一般提示。

编辑 我预期的最终输出是一张表格,可以让我绘制所有基序在序列长度上的位置(查看基序是否分布,例如在序列的开头)。

【问题讨论】:

  • 您的最终预期输出是什么?填充了 1 和 NAs 的两个矩阵(AAAAAAATTTTTTT)?
  • 请看我的编辑。

标签: r dplyr stringr


【解决方案1】:

这是一种可能性:

您可以编写一个函数(我称之为make_vec),它将序列和模式作为输入并返回矩阵的行。

make_vec <- function(seq, pattern) {
  loc <- str_locate_all(seq, pattern)[[1]]
  res <- integer(100)
  idx <- as.numeric(sapply(loc[,1], function(x) x + seq_len(nchar(pattern)) - 1))
  res[idx] <- 1L
  return(res)
}

接下来,您可以对每个序列使用此函数并提取结果:

table3 <- table %>% 
  mutate(
    a = map(seq, make_vec, pattern = "AAAAAAA"),
    t = map(seq, make_vec, pattern = "TTTTTTT"),
  )

  matrix(unlist(table3$a), nrow = 3, byrow = TRUE)

【讨论】:

  • 这是一个接近我想要得到的解决方案 :D 但是当查看matrix(unlist(table3$a), nrow = 3) 的输出时,可以看出有问题......这里的主题被打乱了。是nrow的错吗?
  • 是的,但我的意思是当您查看最终输出时,例如长度为 2 的主题,不应该发生的事情
猜你喜欢
  • 2019-12-20
  • 2016-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-26
相关资源
最近更新 更多