我有一个包含DNA序列字符串的载体:
x <- c("ATTAGCCGAGC", "TTCCGGTTAA")我想根据规则把这些字符串转换成和。
A <- 2
T <- 2
G <- 4
C <- 4因此,ATTAGCCGAGC被翻译成"2+2+2+2+4+4+4+4+2+4+4“,最终输出将是"34”。
期望输出:由原始向量X的一列和“和转换”的另一列组成的数据。
谢谢。
我希望使用"T“不是问题。
发布于 2022-10-04 07:13:34
您可以使用值创建一个命名向量,拆分字符串、匹配和和,即
vals <- setNames(c(2, 2, 4, 4), c('A', 'T', 'G', 'C'))
sapply(strsplit(x, ''), \(i)sum(vals[i]))
#[1] 34 28把它放进这样的数据仓库里,
data.frame(string = x,
val = sapply(strsplit(x, ''), \(i)sum(vals[i])))
string val
1 ATTAGCCGAGC 34
2 TTCCGGTTAA 28发布于 2022-10-04 07:44:13
我想您可以尝试一下chartr + utf8ToInt,如下所示
> sapply(chartr("ATGC", "2244", x), function(v) sum(utf8ToInt(v) - 48))
22224444244 2244442222
34 28发布于 2022-10-04 07:16:06
一种方法是使用gsub两次将基对符号映射到2或4。然后,使用自定义数字求和函数获得和:
x <- c("ATTAGCCGAGC", "TTCCGGTTAA")
x <- as.numeric(gsub("[CG]", "4", gsub("[AT]", "2", x)))
digitsum <- function(x) sum(floor(x / 10^(0:(nchar(x) - 1))) %% 10)
sapply(x, function(x) digitsum(x))
[1] 34 28数字和函数是从这个helpful SO question中提取的。
https://stackoverflow.com/questions/73944215
复制相似问题