2016-05-26 8 views
-1

I haben:die Codeoptimierungs R einen Datensatz zu schreiben, wenn eine Teilzeichenfolge in einer Zeichenkette vorhanden ist

  1. Ein Datenrahmen mit test_var ODB6_OD_ID, Gene_ID und einigen anderen Spalten.
  2. Ein Datenrahmen arranged_data mit architecture_number, Details und Sequence. (Sequenzdaten ist nicht relevant)

möchte ich finden Sie heraus, ob arranged_data $ Details irgendeinen Wert von test_var $ ODB6_OD_ID enthält. Das heißt, wenn der String in arranged_data $ Details einen Teilstring enthält, der einer der Werte in test_var $ ODB6_OD_ID ist. Wenn die Sequenz vorhanden ist, hängen Sie die test_var $ Gene_ID der jeweiligen ODB6_OD_ID an eine Datei an.

Ich muss dies für jede architecture_number tun. Es gibt ungefähr 18 Architekturen mit einem Gesamtdatensatz von 5660.

Dies ist der Code, den ich geschrieben habe, aber es dauert zu lange, was ich wegen der großen Schleifen annahm: (Dies ist nur für Architektur 1. I haben für Architekturen von 1 bis 18) (Architektur 1 enthält etwa 350+ Sequenzen)

while (arranged_data$architecture_number==1) 
{ 
    if(grepl(arranged_data$V2,test_var$ODB6_OG_ID)==TRUE) 
    { 
     write.table(test_var$Gene_ID, file = "architecture1", append = TRUE, sep = '\n') 
    } 
} 

Meine Daten-Set aussieht zu tun: test_var:

ODB6_OG_ID start Gene_ID 
EOG60024F chrXR_group6 FBgn0247618 
EOG60024H chr4_group3 FBgn0070413 
EOG60024K chr2 FBgn0078093 
EOG60024M chr2 FBgn0243975 
EOG60024V chr4_group5 FBgn0247694 
EOG60025C chrXL_group1a FBgn0247949 
EOG60025F chr3 FBgn0245234 
EOG602XCD chr4_group3 FBgn0080574 
EOG602XCQ chr4_group3 FBgn0078791 

arranged_data enthält:

architecture_number Details 
1 chr317678741767875EOG6HQF5814.8092+47 
1 chr325176942517695EOG6NKCGX23.1869-87 
1 chr391494069149407EOG6NZVDZ2.96183+105 
1 chr246642624664263EOG6Z638J1.52323+138 
1 chr4_group3231407231408EOG6QRHQP4.65431-721 
1 chr311648221164823EOG6X3HNJ2.28484+96 
1 chr333466933346694EOG66WZW582.1698+678 
1 chrXR_group854636745463675EOG6XH0KP1.86172+57 
1 chr283746518374652EOG6V17MG2.45409-68 
1 chr31338293913382940EOG63XVQR1.60785+105 

Erforderliche Ausgabe: FBgn0247618 FBgn0070413 FBgn0078093 usw.

(Diese sind nicht in Ordnung.)

Weitere Informationen: OS: Ubuntu Xenial Xerus 16.04 R Version: 3.3. 0 RStudio Version: 0.99.902

+0

Bitte geben Sie ein [minimal reproduzierbares Beispiel] an (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). Außerdem kann das Speichern der Daten in einem Datenrahmen und das anschließende Schreiben auf die Festplatte schneller sein als das Schreiben auf die Festplatte bei jeder Iteration. –

Antwort

0

Hier ist eine Idee,

df$new <- gsub('_.*', '', df$start) 
df1$new <- ifelse(grepl('_', df1$Details), gsub('_.*', '', df1$Details), 
                substring(df1$Details, 1, 4)) 

df1$Gene_ID <- sapply(df1$new, function(i) df$Gene_ID[match(i, df$new)]) 

df1 
# architecture_number          Details new  Gene_ID 
#1     1   chr317678741767875EOG6HQF5814.8092+47 chr3 FBgn0245234 
#2     1   chr325176942517695EOG6NKCGX23.1869-87 chr3 FBgn0245234 
#3     1  chr391494069149407EOG6NZVDZ2.96183+105 chr3 FBgn0245234 
#4     1  chr246642624664263EOG6Z638J1.52323+138 chr2 FBgn0078093 
#5     1 chr4_group3231407231408EOG6QRHQP4.65431-721 chr4 FBgn0070413 
#6     1   chr311648221164823EOG6X3HNJ2.28484+96 chr3 FBgn0245234 
#7     1  chr333466933346694EOG66WZW582.1698+678 chr3 FBgn0245234 
#8     1 chrXR_group854636745463675EOG6XH0KP1.86172+57 chrXR FBgn0247618 
#9     1   chr283746518374652EOG6V17MG2.45409-68 chr2 FBgn0078093 
#10     1  chr31338293913382940EOG63XVQR1.60785+105 chr3 FBgn0245234