首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于SNP标记位置的突变

关于SNP标记位置的突变
EN

Stack Overflow用户
提问于 2020-11-05 09:06:27
回答 2查看 31关注 0票数 0

当我们有像这样的SNP数据时,

代码语言:javascript
复制
  1:168045465:C_T   
  1:2804278:C_G 
  14:88571933:C_T

我们如何将其划分为染色体,位置,等位基因1,等位基因2(例如,1,168045465,C,T)

EN

回答 2

Stack Overflow用户

发布于 2020-11-05 09:34:59

您可以使用一个简单的函数来为您重新格式化:

代码语言:javascript
复制
x = c("1:168045465:C_T", "1:2804278:C_G", "14:88571933:C_T")
refmt = function(snp){
  temp1 = unlist(strsplit(snp, ":"))
  temp2 = unlist(strsplit(temp1[3],"_"))
  temp = c(Chr = temp1[1], pos = temp1[2], a1 = temp2[1], a2 = temp2[2])
  return(temp)
}
op = as.data.frame(t(sapply(x, refmt)))

这会产生:

代码语言:javascript
复制
> op
                Chr       pos a1 a2
1:168045465:C_T   1 168045465  C  T
1:2804278:C_G     1   2804278  C  G
14:88571933:C_T  14  88571933  C  T
票数 1
EN

Stack Overflow用户

发布于 2020-11-05 09:10:34

我们可以使用tidyrextract通过正则表达式将数据提取到不同的列中。

代码语言:javascript
复制
tidyr::extract(df, V1, c('chromosome', 'position', 'allele1', 'allele2'),
                       '(\\d+):(\\d+):(.*)_(.*)')

#  chromosome  position allele1 allele2
#1          1 168045465       C       T
#2          1   2804278       C       G
#3         14  88571933       C       T

您还可以在基本R strcapture中使用相同的正则表达式

代码语言:javascript
复制
proto <- data.frame(chromosome=integer(), position=integer(), 
                    allele1=character(),allele2 = character())

strcapture('(\\d+):(\\d+):(.*)_(.*)', df$V1, proto)

data

代码语言:javascript
复制
df <- structure(list(V1 = c("1:168045465:C_T", "1:2804278:C_G", "14:88571933:C_T"
)), class = "data.frame", row.names = c(NA, -3L))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64689787

复制
相关文章

相似问题

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