2014-04-11 96 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" 
相關問題