gpt4 book ai didi

r - 比较文本字符串的每个* nd符号

转载 作者:行者123 更新时间:2023-12-04 12:29:24 25 4
gpt4 key购买 nike

问题是我的文本文件很大。随它去

 a=c("atcgatcgatcgatcgatcgatcgatcgatcgatcg")

我需要将此文本中的每个第3个符号与值(例如 'c')进行比较,如果为true,我想添加 1来对抗 i
我以为使用 grep,但似乎此功能不适合我的目的。
因此,我需要您的帮助或建议。

不仅如此,我还想从此字符串中提取某些值到向量。在4个示例中,我想提取4:10符号,例如
 a=c("atcgatcgatcgatcgatcgatcgatcgatcgatcg")
[1] "gatcgatcga"

先感谢您。

P.S.

我知道用R编写脚本不是最好的主意,但是我很好奇是否有可能以适当的方式编写脚本。

最佳答案

编辑以提供一种快速解决方案,适用于大得多的字符串:

如果您有一个很长的字符串(大约数百万个核苷酸),那么我原始答案中的隐式断言(如下)太慢而无法实用。在这种情况下,请使用类似于以下的内容:(1)将字符串分割成每个字符; (2)使用字符填充三行矩阵;然后(3)提取矩阵第三行中的字符。处理300万个字符长的字符串大约需要0.2秒。

## Make a 3-million character long string
a <- paste0(sample(c("a", "t", "c", "g"), 3e6, replace=TRUE), collapse="")

## Extract the third codon of each triplet
n3 <- matrix(strsplit(a, "")[[1]], nrow=3)[3,]

## Check that it works
sum(n3=="c")
# [1] 250431
table(n3)
# n3
# a c g t
# 250549 250431 249008 250012

原始答案:

在两种情况下,我都可能使用 substr()
## Split into codons. (The "lookbehind assertion", "(?<=.{3})" matches at each
## inter-character location that's preceded by three characters of any type.)
codons <- strsplit(a, "(?<=.{3})", perl=TRUE)[[1]]
# [1] "atc" "gat" "cga" "tcg" "atc" "gat" "cga" "tcg" "atc" "gat" "cga" "tcg"

## Extract 3rd nucleotide in each codon
n3 <- sapply(codons, function(X) substr(X,3,3))
# atc gat cga tcg atc gat cga tcg atc gat cga tcg
# "c" "t" "a" "g" "c" "t" "a" "g" "c" "t" "a" "g"

## Count the number of 'c's
sum(n3=="c")
# [1] 3


## Extract nucleotides 4-10
substr(a, 4,10)
# [1] "gatcgat"

关于r - 比较文本字符串的每个* nd符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27972844/

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