【问题标题】:Regular expression to catch all possibilities?正则表达式捕捉所有可能性?
【发布时间】:2017-12-20 13:53:29
【问题描述】:

我的输入是如下所示的基因数据:

SNP       VALUE
rs123456  A/G
rs345353  del/CTT
rs343524  T
rs243224  T/del
....

如果不深入研究遗传学,我们所有人都有 2 个等位基因(妈妈和爸爸),所以如果您只有一个没有“/”的值(A/C/G/T/del/CTT),这意味着两个等位基因是相同的,如果不是,则有斜线“/”表示它们不同。

长话短说,我需要找到 SNP 的已知模式,但我知道有很多可能性(如果 /(斜线)值的数量很大)。

我已经建立了这样的正则表达式:[A|C|G|T|del|CTT]

A/G = G/A 所以我需要匹配所有可能性。

是否有任何功能或逻辑可以帮助我做到这一点?请指教。

附言

添加更多信息:

预期的输出是值的所有可能变体,例如:

rs123 = A/G, rs456 = T/C, rs789 = CTT: 
Option 1: A T CTT; 
Option 2: A C CTT; 
Option 3: G T CTT; 
Option 4: G C CTT; 

但如果我有超过 2 个 / 我想获得所有选项。

【问题讨论】:

  • 你能提供预期的输出吗?还可以考虑添加更大的数据示例。
  • 那么您的预期输出是什么,您能否提供涵盖所有基础的示例输入(即您提到的多种情况的示例输入是可能的)。这样做将有助于我们为您提供适当的帮助。
  • 我猜你需要将/分开,然后sortpaste重新组合在一起
  • 您好,感谢您的回答,预期的输出是值的所有可能变体,例如:rs123 = A/G、rs456 = T/C、rs789 = CTT:选项 1:A T CTT;选项 2:C CTT;选项 3:G T CTT;选项 4:G C CTT;但如果我有超过 2 个/我想获得所有选项。

标签: r regex pattern-matching genetic-algorithm genetic-programming


【解决方案1】:

如果我理解正确,你就是在这个之后:

df = data.frame(SNP = c("rs123456",  "rs345353", "rs343524" ,"rs243224"),
                value = c("A/G", "del/CTT", "T", "T/del"), stringsAsFactors = F)

expand.grid(strsplit(df$value, "/"))
#output
  Var1 Var2 Var3 Var4
1    A  del    T    T
2    G  del    T    T
3    A  CTT    T    T
4    G  CTT    T    T
5    A  del    T  del
6    G  del    T  del
7    A  CTT    T  del
8    G  CTT    T  del

或者如果每个组合都需要一个字符串

apply(expand.grid(strsplit(df$value, "/")), 1, paste, collapse = " ")
#output
[1] "A del T T"   "G del T T"   "A CTT T T"   "G CTT T T"   "A del T del" "G del T del"
[7] "A CTT T del" "G CTT T del"

或:

do.call(paste, c(expand.grid(strsplit(df$value, "/")), sep=" "))

【讨论】:

  • 太棒了!谢谢!我也在寻找正则表达式解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-23
  • 1970-01-01
  • 1970-01-01
  • 2011-12-14
相关资源
最近更新 更多