使用grep匹配更改字符串的模式

时间:2013-04-26 13:20:23

标签: string r grep pattern-matching

我有一个data.frame,其中包括玉米杂交种和玉米自交系的试验数据。每个近交系在该数据框中具有唯一的条目。另外,我有玉米杂交种,这是两个近交系交叉的结果。

我提取了近交系的所有条目和杂种的所有条目,并将它们存储在两个单独的载体中。 向量'inbred'包含每个近交系的编码条目名称:

inbred <- c("F124", "L258", "F309", "P045", "D634", "D183-43", "F205-35")

向量hybrid包含每个混合的编码条目名称。

hybrid <- c("F124xP045", "F124xD183-43", "F309xP045", "F205-35xL258", "F309xD634")

每个杂种有两个近交系作为亲本,因此'杂种'载体中的每个字符串由第一个近交系组成,第一个近交系与第二个近交系分开一个'x'。

我的目标是找出哪些近交系是任何杂交系的亲本成分。发生的次数对我不感兴趣。 最后,我想得到一个独特的近交系的新载体,它是至少一种杂交体的一部分,并将它们用于PCA。

我尝试使用grep()函数从vector'hybrid'中的vector'inbred'中搜索任何字符串,并使用unique()函数排除多次出现的所有匹配。我特别的问题是,模式总是在变化,因为我每次都试图在“混合”矢量中搜索不同的近交系。

这是我用来获得唯一匹配的代码。

unique.parents <- unique(grep(paste(inbred, collapse= "|"),hybrid, value=TRUE))
unique.parents
#[1] "F124xP045"    "F124xD183-43" "F309xP045"    "F205-35xL258" "F309xD634" 

我的方法只产生了包含我试图匹配的任何近交系的杂种。

1 个答案:

答案 0 :(得分:1)

我认为,如你所说,&#34;&#39;混合物中的每个字符串&#39;载体由第一个近交系组成,第一个近交系与第二个近交系分开一个&#39;&#39;&#34;。 因此,您只需要使用&#34; x&#34;分割F1列表。作为拆分器,取消列表并获取独特的项目。

很简单:

unique.parents <- unique(unlist(strsplit(hybrid,split="x")))