如何匹配,提取和分配模式

时间:2017-05-16 09:40:39

标签: r

我有一些模式

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匹配模式,但它只返回整个序列,如何提取匹配的模式并获取模式组。

谢谢!

1 个答案:

答案 0 :(得分:1)

您需要将AB放在数据框中,然后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