我有一個包含一列(SNP)一個數據幀(行程)。它看起來像這樣(但時間越長,它擁有192個等級):在R中,如何將正則表達式應用於包含模式的字符串的特定部分?
SNP
C[T->C]T
C[G->C]A
G[A->C]A
C[T->C]C
C[C->A]G
T[G->A]C
...
我想要模式匹配,並根據以下標準代替:
gsub("G->T", "C->A", trip)
gsub("G->C", "C->G", trip)
gsub("G->A", "C->T", trip)
gsub("A->T", "T->A", trip)
gsub("A->G", "T->C", trip)
gsub("A->C", "T->G", trip)
而且,如果該模式的一個上市上面找到了,我想要包含它的字符串應用了額外的替換。即:
if ((grep(G->T|G->C|G->C|A->T|A->G|A->C), trip$SNP)==TRUE){
substr(trip$SNP, 1,1) <- tr /ATCG/TAGC/; #incompatible perl syntax?
substr(trip$SNP, 8,8) <- tr /ATCG/TAGC/;
}
如,如果任何這些圖案的 - G-> T,G-> C,G-> C,A-> T,A-> G,或A-> C- - 在行程$ SNP中的字符串中找到,根據此正則表達式替換該字符串中的第1個字符和第8個字符:tr/ATCG/TAGC /;
希望的輸出,具有變化以粗體:
SNP C [T-> C]Ť C [G-> C]甲 G [A-> C]甲 C [T-> C]ç C [C->甲; G T [G-> A]ç
到:
SNP C [T-> C]Ť G [C-> G] Ť C [T-> G]Ť ç [T-> C]Ç C [C->甲; G A [C-> T]ģ
是否有一個更優雅的方式來做到這一點?
我並不完全明白你在做什麼('TR/ATCG /湘火炬/'那裏是你的報價嗎?),但我99.9%肯定它會工作到粘貼'到字符串時,你要做的第一'gsub'然後用%s''sprintf'以後插入你想要的東西。 –