在R中提取一个固定长度的字符
Extract a fixed-length character in R
我有一个由 DNA 序列组成的属性,想将其翻译成它的氨基名称。
所以我需要将序列拆分为一个固定长度的字符 3。
这是数据样本
data=c("AATAGACGT","TGACCC","AAATCACTCTTT")
如何将其提取到:
[1] "AAT" "AGA" "CGT"
[2] "TGA" "CCC"
[3] "AAA" "TCA" "CTC" "TTT"
到目前为止,我只能找到如何在给定特定正则表达式作为分隔符的情况下拆分字符串
尝试
strsplit(data, '(?<=.{3})', perl=TRUE)
或者
library(stringi)
stri_extract_all_regex(data, '.{1,3}')
as.list(gsub("(.{3})", "\1 ", data))
[[1]]
[1] "AAT AGA CGT "
[[2]]
[1] "TGA CCC "
[[3]]
[1] "AAA TCA CTC TTT "
或
regmatches(data, gregexpr(".{3}", data))
[[1]]
[1] "AAT" "AGA" "CGT"
[[2]]
[1] "TGA" "CCC"
[[3]]
[1] "AAA" "TCA" "CTC" "TTT"
另一个解决方案,仍然是一个衬垫,但不如其他解决方案优雅(使用 lapply
):
lapply(data, function(u) substring(u, seq(1, nchar(u), 3), seq(3, nchar(u),3)))
#[[1]]
#[1] "AAT" "AGA" "CGT"
#[[2]]
#[1] "TGA" "CCC"
#[[3]]
#[1] "AAA" "TCA" "CTC" "TTT"
另一个:
library(gsubfn)
strapply(data, "...")
我有一个由 DNA 序列组成的属性,想将其翻译成它的氨基名称。 所以我需要将序列拆分为一个固定长度的字符 3。 这是数据样本
data=c("AATAGACGT","TGACCC","AAATCACTCTTT")
如何将其提取到:
[1] "AAT" "AGA" "CGT"
[2] "TGA" "CCC"
[3] "AAA" "TCA" "CTC" "TTT"
到目前为止,我只能找到如何在给定特定正则表达式作为分隔符的情况下拆分字符串
尝试
strsplit(data, '(?<=.{3})', perl=TRUE)
或者
library(stringi)
stri_extract_all_regex(data, '.{1,3}')
as.list(gsub("(.{3})", "\1 ", data))
[[1]]
[1] "AAT AGA CGT "
[[2]]
[1] "TGA CCC "
[[3]]
[1] "AAA TCA CTC TTT "
或
regmatches(data, gregexpr(".{3}", data))
[[1]]
[1] "AAT" "AGA" "CGT"
[[2]]
[1] "TGA" "CCC"
[[3]]
[1] "AAA" "TCA" "CTC" "TTT"
另一个解决方案,仍然是一个衬垫,但不如其他解决方案优雅(使用 lapply
):
lapply(data, function(u) substring(u, seq(1, nchar(u), 3), seq(3, nchar(u),3)))
#[[1]]
#[1] "AAT" "AGA" "CGT"
#[[2]]
#[1] "TGA" "CCC"
#[[3]]
#[1] "AAA" "TCA" "CTC" "TTT"
另一个:
library(gsubfn)
strapply(data, "...")