我有一个表,表中有一列突变信息,是氨基酸变化的三个字母代码,如下所示:
Amino acid change
------------------------
NP_006209.2:p.Thr1025Ala
NP_203524.1:p.Gly12Asp
NP_000537.3:p.Arg273Cys
NP_004324.2:p.Val600Glu
NP_000537.3:p.Ser215Ile
在另一个表中,我有氨基酸的三个字母代码和一个字母代码,如下所示:
three_letters|one_letters
-------------|-----------
Ala |A
Arg |R
Asn |N
Asp |D
...
Val |V
Asx |B
Glx |Z
Ter |*
我需要一个新的列在我的突变表中,氨基酸的一个字母代码如下:
new column
-----------
p.T1025A
p.G12D
p.R273C
p.V600E
p.S215I
3条答案
按热度按时间bwntbbo31#
您可以使用正则表达式来解决这个问题,只要更改代码始终是三个字母后跟一个或多个数字后跟三个字母。
它返回一个数组,该数组可用于连接到查找表,然后重建缩短的代码。
djmepvbi2#
您的字符串的格式非常特殊。前缀看起来是固定长度的。接着是三个字符,一个数字(大概是一个位置),然后是另外三个字符。
如果总是这样的话,你不需要任何真正复杂的机器来替换。您可以只使用字符串操作:
实际上,我建议您更改数据结构,这样值就不会全部编码在一个字符串中。将结果放在多个列中:
name
from_amino_acid
to_amino_acidposition
事实上,我不知道在那之前发生了什么:
,也不知道p.
这很重要。您可能还需要将其拆分为多个列。您可以使用这样的逻辑来拆分字符串:这将简化sql,也可能简化分析。
nnvyjq4y3#
@mike organek提出的另一种解决方案是创建一个短函数来为您执行此转换。
数据样本:
功能:
如何调用函数:
在那之后你需要做的就是
UPDATE
使用函数创建表