R:cbind基于匹配前几个字母或单元格的数量

时间:2011-07-06 06:07:42

标签: r match

我有这样的df1:

df1 <- data.frame(A=c("x01","x02","y03","z02","x04"), B=c("A01BB01","A02BB02","C02AA05","B04CC10","C01GX02"))

    A       B
1 x01 A01BB01
2 x02 A02BB02
3 y03 C02AA05
4 z02 B04CC10
5 x04 C01GX02

我有这样的df2。

  X     Y
1 a A01BB
2 b   A02
3 c  C02A
4 d   B04
5 e C01GX

df2 <- data.frame(X=c("a","b","c","d","e"), Y=c("A01BB","A02","C02A","B04","C01GX"))

我希望将df1 $ B中的前几个字母/数字与df2 $ Y中的字母/数字相匹配。然后根据最佳匹配合并两个数据帧,因此,我们希望看到这样的结果数据框:

  A       B   X     Y
1 x01 A01BB01   a A01BB
2 x02 A02BB02   b   A02
3 y03 C02AA05   c  C02A
4 z02 B04CC10   d   B04
5 x04 C01GX02   e C01GX
你能介意教我怎么做吗?感谢。

匹配只能在前几个字母/数字中出现,匹配的部分不能出现在df1 $ B中的单词的中间或末尾,是否有任何有效的方法可以用R?

1 个答案:

答案 0 :(得分:0)

您可以使用pmatch进行此类匹配:

with(c(df1,df2),{
  i <- pmatch(Y,B)
  data.frame(A,B,X = X[i],Y = Y[i])
})