【发布时间】: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 查找声明的主题(AAAAAAA 和 TTTTTTT(我想找到所有主题的位置):
table2 <- table %>%
mutate(AAAAAAA = str_locate_all(seq, "AAAAAAA")) %>%
mutate(TTTTTTT = str_locate_all(seq, "TTTTTTT"))
不幸的是,只有 start 和 end 主题的位置:
# 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,然后填充start 和end 之间的位置:
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 的两个矩阵(AAAAAAA和TTTTTTT)? -
请看我的编辑。