R中的匹配模式和替换

时间:2015-06-30 05:14:38

标签: r replace pattern-matching

我有两个文件。 一个文件(file1)是..

$ cd android-sdk/platform-tools/systrace
$ python systrace.py --time=10 -o mynewtrace.html sched gfx view wm

另一个文件(file2)是..

 Symbol pairs
1 ABAT  row1
2 ACADSB  row2
3 ACTG2  row3
4 ANXA3  row4

我想将“row1”替换为“ABAT”,所以..

    rownames    Sample1 Sample2 Sample3
row1-row1    row1-row1  0   0   0
row1-row2    row1-row2  -1.819133494    0.3023401   -0.8904574
row1-row3    row1-row3  -3.409451405    0.1103111   -0.9247103

但是“file2_rowname”很奇怪。它包含file1的符号中不存在的符号(例如ABAT0,ABAT1,ABAT2 ..)。

我想要这个结果。

gsubr <- function(pattern, replacement, x) {
  for(i in 1:length(pattern))
    x <- gsub(pattern[i], replacement[i], x)
  x = as.data.frame(x) 
}
from = file1[,2]
to = file1[,1]

file2_rowname = gsubr(from, to, file2[,1])

给我一​​个建议。谢谢!

1 个答案:

答案 0 :(得分:1)

您可以做的一件事是根据rownames-)拆分strsplit,将row.替换为正确的基因名称(match }),根据data.frame与匹配,最后“融合”回名称(paste),将-放在基因名称之间。

因此,在R语言中,如果带有rownames的data.frame被称为tab,并且带有匹配项的data.frame被称为corresp

tab$rownames <-  sapply(lapply(strsplit(tab$rownames, "-"), 
                                 function(v){corresp$Symbol[match(v, corresp$pairs)]}), 
                          function(v){paste(v, collapse="-")})
tab
#     rownames   Sample1   Sample2    Sample3
#1   ABAT-ABAT  0.000000 0.0000000  0.0000000
#2 ABAT-ACADSB -1.819133 0.3023401 -0.8904574
#3  ABAT-ACTG2 -3.409451 0.1103111 -0.9247103

这是您要找的输出吗?