![](/img/trans.png)
[英]Solution needed for identifying partially matching strings (DNA sequences) in a data.frame with many rows
[英]count of multiple partially matching DNA sequences
我有一个部分匹配的 DNA 序列数据集,我想为部分匹配的序列分配不同的数字索引。
IE:
sequences <- c("AAAAAAAAAAAAAAA",
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"AAAAAAAAAAAAAAAAAAAAAAAAAAAACCC",
"AAAAAAAAAAAAAAAAAAAAAAAAACC",
"CATTTTCAG",
"CATTTTCAGTCAAAATTT",
"CATG",
"CATGG",
"CATGGGTT",
"GATC")
第一个在第 2、第 3 和第 4 个重复出现,它们都应该得到值 1,第 5 个在第 6 个重复出现,它们都应该得到 2,第 7 个在第 8 个和第 9 个重复出现,并且都应该得到一个 3,第 10 个不会重复出现,应该得到 4 作为索引。 当然,这只是一个示例,有时数据集可能包含 >3000 行。
我尝试了几种解决方案,包括 grepl 和 str_count。 最新的尝试之一是首先创建一个字典来存储所有序列和索引,创建一个前缀列表,然后迭代前缀以分配索引。 然而,结果并不是我所期望的,因为所有序列的索引都是 1。
# Create a dictionary to store the sequences and their indices
indices <- as.list(1:length(sequences))
names(indices) <- sequences
# Create a function that returns the first 7 characters of a sequence
get_prefix <- function(seq) {
return(substring(seq, 1, 7))
}
# Create a list of unique prefixes
prefixes <- unique(sapply(sequences, get_prefix))
# Iterate over the prefixes and assign the same index to all sequences that start with the same prefix
for (i in 1:length(prefixes)) {
prefix <- prefixes[i]
seqs <- sequences[sapply(sequences, get_prefix) == prefix]
indices[seqs] <- which.min(indices[seqs])
}
# Print the final indices
print(indices)
欢迎任何帮助! 谢谢!
这个问题与使用关系数据进行分组有关。 您可以使用grep
+ igraph
这样做:
library(igraph)
sapply(sequences, grep, sequences, value = TRUE) |>
stack() |>
graph.data.frame() |>
clusters() |>
getElement("membership") |>
stack()
values ind
1 1 AAAAAAAAAAAAAAA
2 1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
3 1 AAAAAAAAAAAAAAAAAAAAAAAAAAAACCC
4 1 AAAAAAAAAAAAAAAAAAAAAAAAACC
5 2 CATTTTCAG
6 2 CATTTTCAGTCAAAATTT
7 3 CATG
8 3 CATGG
9 3 CATGGGTT
10 4 GATC
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.