gpt4 book ai didi

r - 我有一个字符向量,如 A、G、C、T。我想要使​​用 R 从向量中获得 A 的最长序列

转载 作者:行者123 更新时间:2023-12-02 09:31:27 25 4
gpt4 key购买 nike

set.seed (12345)

data <- paste(sample(c("A","C","G","T"),100000,replace=TRUE,prob=rep(0.25,4)))
data <- ifelse(data=="A",1,0)

假设我将数据转换为 1(所需字符)和 0(其他字符)。然后在每个位置求和。如果一个位置的总和与下一个位置的总和相匹配,我们就停止;否则我们进行求和并将和存储在位置上。然后相应位置的最大和将给出序列的最大长度。

我得到了算法,但无法编码。请帮忙。

最佳答案

rle function这就是您想要的:

set.seed(12345)
data = sample(c('A', 'C', 'G', 'T'), 100000, replace = TRUE, prob = rep(0.25, 4))

run_lengths = rle(data == 'A')
(result = max(run_lengths$lengths[run_lengths$values]))
# [1] 10

获得最长距离的位置有点困难。您可以使用 which.max 来实现此目的,但我们之前已过滤掉所有非 A 结果。相反,我们还可以将所有非 A 运行设置为 0 - 这样,它们仍然会在那里,但不会是最大值:

only_a = ifelse(run_lengths$values, run_lengths$lengths, 0)
longest_run_index = which.max(only_a)

现在我们需要从 longest_run_index 计算回 A 内的索引。我们通过将这个索引之前的所有运行的长度相加来做到这一点:

index = sum(run_lengths$lengths[seq_len(longest_run_index - 1)]) + 1
data[index : (index + result - 1)]
# [1] "A" "A" "A" "A" "A" "A" "A" "A" "A" "A"

关于r - 我有一个字符向量,如 A、G、C、T。我想要使​​用 R 从向量中获得 A 的最长序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32769101/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com