R 给定字符向量中具有多个模式的正则表达式

R 给定字符向量中具有多个模式的正则表达式,r,regex,string,gsub,R,Regex,String,Gsub,我有一个字符串(x,见下文),它有许多不同的格式。它们都是基因组上的位置,但名称不同。这些名字是给我的,属于大约600万人的名单,所以我不容易手动更改。这是一个子集,但也有类似X1或chr 13的其他子集也属于此列表的一部分: x <- c("rs62224609.16051249.T.C", "rs376238049.16052962.C.T","rs62224614.16053862.C.T","X22.17028719.G.A", "rs4535153", "X22.1702871

我有一个字符串(x,见下文),它有许多不同的格式。它们都是基因组上的位置,但名称不同。这些名字是给我的,属于大约600万人的名单,所以我不容易手动更改。这是一个子集,但也有类似X1或chr 13的其他子集也属于此列表的一部分:

 x <- c("rs62224609.16051249.T.C", "rs376238049.16052962.C.T","rs62224614.16053862.C.T","X22.17028719.G.A", "rs4535153", "X22.17028719.G.A", "kgp3171179", "rs375850426.17029070.GCAGTGGC.G"  , "chr22.17030620.G.A")

任何帮助都将不胜感激

如果您的所有数据都与您给出的示例相符:

x = c("rs62224609.16051249.T.C", "rs376238049.16052962.C.T","rs62224614.16053862.C.T","X22.17028719.G.A", "rs4535153", "X22.17028719.G.A", "kgp3171179", "rs375850426.17029070.GCAGTGGC.G"  , "chr22.17030620.G.A")
有两种类型的ID,一种是SNP ID(从rs或kgp开始),另一种是给出染色体位置(从染色体名称开始)。 你可以从识别你的SNP ID开始,比如:

x1 = gsub("((rs|kgp)\\d+).*","\\1",x)
这将返回:

[1] "rs62224609"     "rs376238049"    "rs62224614"     "X22.17028719.G.A"   "rs4535153"     "X22.17028719.G.A"   "kgp3171179"     "rs375850426"     "chr22.17030620.G.A"
[1] "rs62224609"     "rs376238049"    "rs62224614"     "chr22:17028719" "rs4535153"      "chr22:17028719"   "kgp3171179"     "rs375850426"    "chr22:17030620"
然后将染色体位置格式化为(我假设你的染色体是1到22,X,Y和M,但这取决于你的数据):

这将返回:

[1] "rs62224609"     "rs376238049"    "rs62224614"     "X22.17028719.G.A"   "rs4535153"     "X22.17028719.G.A"   "kgp3171179"     "rs375850426"     "chr22.17030620.G.A"
[1] "rs62224609"     "rs376238049"    "rs62224614"     "chr22:17028719" "rs4535153"      "chr22:17028719"   "kgp3171179"     "rs375850426"    "chr22:17030620"

如果您的所有数据都与您给出的示例相符:

x = c("rs62224609.16051249.T.C", "rs376238049.16052962.C.T","rs62224614.16053862.C.T","X22.17028719.G.A", "rs4535153", "X22.17028719.G.A", "kgp3171179", "rs375850426.17029070.GCAGTGGC.G"  , "chr22.17030620.G.A")
有两种类型的ID,一种是SNP ID(从rs或kgp开始),另一种是给出染色体位置(从染色体名称开始)。 你可以从识别你的SNP ID开始,比如:

x1 = gsub("((rs|kgp)\\d+).*","\\1",x)
这将返回:

[1] "rs62224609"     "rs376238049"    "rs62224614"     "X22.17028719.G.A"   "rs4535153"     "X22.17028719.G.A"   "kgp3171179"     "rs375850426"     "chr22.17030620.G.A"
[1] "rs62224609"     "rs376238049"    "rs62224614"     "chr22:17028719" "rs4535153"      "chr22:17028719"   "kgp3171179"     "rs375850426"    "chr22:17030620"
然后将染色体位置格式化为(我假设你的染色体是1到22,X,Y和M,但这取决于你的数据):

这将返回:

[1] "rs62224609"     "rs376238049"    "rs62224614"     "X22.17028719.G.A"   "rs4535153"     "X22.17028719.G.A"   "kgp3171179"     "rs375850426"     "chr22.17030620.G.A"
[1] "rs62224609"     "rs376238049"    "rs62224614"     "chr22:17028719" "rs4535153"      "chr22:17028719"   "kgp3171179"     "rs375850426"    "chr22:17030620"

“X22.17028719.G.A”
“chr22:17028719”与
“rs62224609.16051249.T.C”
->
“rs62224609”
请用补充信息编辑原始问题。是的,您能解释一下
“X22.17028719.G.A”
变成
“chr22:17028719”的原因吗“
?有没有像
X22
这样的前缀需要这样替换,或者您可以将
X22.
的所有实例替换为
chr22:
?谢谢您的提问!是的,我可以,但我正在尝试自动化,因为还有X1,X2。。。一直到X22。除了X之外,没有其他前缀。
“X22.17028719.G.A”与
“rs62224609.16051249.T.C”
“rs62224609”
的区别是什么?请用补充信息编辑原始问题。是的,你能解释一下为什么
“X22.17028719.G.A”变成
chr22:17028719“
?有没有像
X22
这样的前缀需要这样替换,或者您可以将
X22.
的所有实例替换为
chr22:
?谢谢您的提问!是的,我可以,但我正在尝试自动化,因为还有X1,X2。。。一直到X22。除了X.Hi@Lamia之外,没有其他前缀。另一个简单的问题是…假设我有一个类似于此测试的SNP列表,如果你做了
gsub(((rs|kgp)\\d+).*,“\\1”,c('psy_rs1806509_c','psy_rs18350409_TTA')
,它返回“psy_rs1806509”“psy_rs18350409”。这不是你想要的吗?嗨,拉米娅。另一个简单的问题是…假设我有一个类似于此测试的SNP列表,如果你做了
gsub(((rs|kgp)\\d+).*,“\\1”,c('psy_rs1806509_c','psy_rs18350409_TTA')
,它返回“psy_rs1806509”“psy_rs18350409”。这不是你想要的吗?