首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当每个字符表示一个数字时,转换字符串ito和

当每个字符表示一个数字时,转换字符串ito和
EN

Stack Overflow用户
提问于 2022-10-04 07:08:06
回答 4查看 68关注 0票数 4

我有一个包含DNA序列字符串的载体:

代码语言:javascript
复制
x <- c("ATTAGCCGAGC", "TTCCGGTTAA")

我想根据规则把这些字符串转换成和。

代码语言:javascript
复制
A <- 2
T <- 2
G <- 4
C <- 4

因此,ATTAGCCGAGC被翻译成"2+2+2+2+4+4+4+4+2+4+4“,最终输出将是"34”。

期望输出:由原始向量X的一列和“和转换”的另一列组成的数据。

谢谢。

我希望使用"T“不是问题。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2022-10-04 07:13:34

您可以使用值创建一个命名向量,拆分字符串、匹配和和,即

代码语言:javascript
复制
vals <- setNames(c(2, 2, 4, 4), c('A', 'T', 'G', 'C'))
sapply(strsplit(x, ''), \(i)sum(vals[i]))
#[1] 34 28

把它放进这样的数据仓库里,

代码语言:javascript
复制
data.frame(string = x, 
           val = sapply(strsplit(x, ''), \(i)sum(vals[i])))

       string val
1 ATTAGCCGAGC  34
2  TTCCGGTTAA  28
票数 5
EN

Stack Overflow用户

发布于 2022-10-04 07:44:13

我想您可以尝试一下chartr + utf8ToInt,如下所示

代码语言:javascript
复制
> sapply(chartr("ATGC", "2244", x), function(v) sum(utf8ToInt(v) - 48))
22224444244  2244442222 
         34          28
票数 3
EN

Stack Overflow用户

发布于 2022-10-04 07:16:06

一种方法是使用gsub两次将基对符号映射到2或4。然后,使用自定义数字求和函数获得和:

代码语言:javascript
复制
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中提取的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73944215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档