2017-05-16 3 views
2

Ich habe einige MusterWie passen, zu extrahieren und weisen ein Muster

A <- c("A..A","A.A","AA") 
B <- c("B..B","B.B","BB") 

und einige Sequenzen und ihre freqs in einem data.frame

Seq  freq 

CACCA  1 

CAACC  2 

BCCBC  3 

Ich brauche das Muster auf den ASTA anzupassen , extrahieren und die Muster zuordnen als

Seq  freq Pattern From 

CACCA  1 A..A  A 

CAACC  2 AA  A 

BCCBC  3 B..B  B 

ich grep verwendet folgen dem Muster übereinstimmen, aber es gibt nur die ganze Sequen Wie kann ich das übereinstimmende Muster extrahieren und die Mustergruppe erhalten?

Vielen Dank!

Antwort

1

Sie müssen A und B in einem Datenrahmen und stack es so in einem langen Format setzen.

d1 <- stack(data.frame(A, B, stringsAsFactors = FALSE)) 
# values ind 
#1 A..A A 
#2 A.A A 
#3  AA A 
#4 B..B B 
#5 B.B B 
#6  BB B  

#use gsub to convert the Seq to the same format as A and B 
df$v1 <- gsub(' ', '.', trimws(gsub('[C-Z]', ' ', df$Seq))) 
#which gives [1] "A..A" "AA" "B..B" 

df$From <- d1$ind[match(df$v1, d1$values)] 

df 
# Seq freq v1 From 
#1 CACCA 1 A..A A 
#2 CAACC 2 AA A 
#3 BCCBC 3 B..B B 
+0

danke, Sotos. Ich habe eine Liste von Mustergruppen, die eine unterschiedliche Anzahl von Mustern enthalten. stack returns error: Argumente bedeuten eine unterschiedliche Anzahl von Zeilen: 3, 1, 5. Ich kann die Mustergruppen in data.frame umwandeln, umbenennen und rbind verwenden. Wunder, gibt es eine nette Möglichkeit, dies zu tun? –

+0

Können Sie ein Beispiel für diese Liste geben? – Sotos

+0

@ Xiao-yanPan der Standard Weg zu rbind Vektoren in einer Liste von unterschiedlicher Länge ist, um ihre Länge gleich zuerst. [Dies sollte klarstellen] (http://stackoverflow.com/questions/34570860/adding-na-to-make-all-list-elements-equal-length) – Sotos

Verwandte Themen