我有一些模式
A <- c("A..A","A.A","AA")
B <- c("B..B","B.B","BB")
和data.frame中的一些序列及其频率
Seq freq
CACCA 1
CAACC 2
BCCBC 3
我需要将模式与seqs匹配,提取并分配模式如下
Seq freq Pattern From
CACCA 1 A..A A
CAACC 2 AA A
BCCBC 3 B..B B
我使用grep匹配模式,但它只返回整个序列,如何提取匹配的模式并获取模式组。
谢谢!
答案 0 :(得分:1)
您需要将A
和B
放在数据框中,然后stack
将其设置为长格式。
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