2014-04-11 54 views
0

我有这样的问题: 我有2个txt文件。 一个看起来是这样的:如果字符串包含矢量的任何元素

ABCG1 
ABLIM1 
ABP1 
ACOT11 
ACP5 

并含有700+的字符串,而第二个看起来像这样:

1  2  3  4  5  6  GENE_NAME 
0.01857 0.02975 0.02206 0.01847 0.01684 0.01588 NIPA2;NIPA2;NIPA2;NIPA2 
0.81992 0.8168 0.76963 0.83116 0.78114 0.85544 MAN1B1 
0.13053 0.12308 0.10654 0.11675 0.13664 0.10312 TSEN34;TSEN34 
0.91888 0.93095 0.91498 0.91558 0.91126 0.91569 LRRC16A 

,它的尺寸为90 + X640 000多个

我想提取第二个制表符分隔文件的字符串,其中包含第一个值的任何值。我想到了这样的事情:

data=x[1,] 
data=data[-1,] 
for (i in 1:nrow(test)){ 
    if (grepl("gene_name",test[i,]$GENE_NAME=="TRUE")){ 
    data_temp=x[i,] 
    data=rbind(data,data_temp) 
    rm(data_temp) 
    } 

但我要重复这个代码700+次的问题。有没有什么办法来写水木清华这样的:

value= c(vector that contains my gene names) 
string= (one of srings of my table) 
grepl(any(value),string) 

any遇到的问题,因为它使向量逻辑的,而不是性格。 预先感谢您。

+0

如果添加“GENE_NAME”作为第一个文件中的列标题,你可以做你可以选择不公开它:'合并(DF1,DF2,通过=“GENE_NAME” )'。其中df1和df2是作为数据帧的文件 – Harpal

回答

0

这样可以吗?

value <- c("ABCG1", 
      "ABLIM1", 
      "ABP1", 
      "ACOT11", 
      "ACP5") 


GENE_NAME <- c("ABCG1;NIPA2;NIPA2", 
      "ABLIM1", 
      "ABP1;ABCG1", 
      "ACOT11", 
      "TSEN34;TSEN34", 
      "ACP5", 
      "LRRC16A") # This is the test$GENE_NAME column 

lapply(value, function(x) GENE_NAME[grepl(x, GENE_NAME)]) 
# [[1]] 
# [1] "ABCG1;NIPA2;NIPA2" "ABP1;ABCG1"  
# 
# [[2]] 
# [1] "ABLIM1" 
# 
# [[3]] 
# [1] "ABP1;ABCG1" 
# 
# [[4]] 
# [1] "ACOT11" 
# 
# [[5]] 
# [1] "ACP5" 

如果你喜欢

unlist(lapply(value, function(x) GENE_NAME[grepl(x, GENE_NAME)])) 
# [1] "ABCG1;NIPA2;NIPA2" "ABP1;ABCG1"  "ABLIM1"   "ABP1;ABCG1"  "ACOT11"   
# [6] "ACP5" 
相关问题