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

R:cbind基于匹配单元格的前几个字母或数字,r,match,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 A B X Y 1 x01 A01BB01 a A

我有这样的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
  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?< /p> 你可以使用pMatl来进行这种匹配:

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

非常感谢。当df1和df2的行数不同时,您能教我如何修改您的代码吗?如果它还允许匹配多次发生,则无论何时,都不应给出匹配,NA?我不确定我是否理解您的问题-请尝试在上述代码示例中将data.frame替换为list对不起,我在这个问题中没有给出足够的详细信息。我已经修改并发布了一个修改后的详细问题,如下所示。请给出您的意见@空球
with(c(df1,df2),{
  i <- pmatch(Y,B)
  data.frame(A,B,X = X[i],Y = Y[i])
})