我在用R
处理一些数据框。我的问题与如何检查第一个数据帧中的变量值是否与另一个数据帧中的值匹配有关。这场比赛与其他比赛有很大不同merge
or join
。我将介绍我的数据框(dput()
最后):
我的第一个数据框是df1
。它包含变量name
我想将其与第二个数据框中的其他变量进行对比。它看起来像这样:
df1
name
1 JUAN GIRON
2 GINA OLEAS
3 JUAN FERNANDO ELIZAGA
4 MARCO TORRES
5 JUAN PABLO GONZALEZ
6 IRMA GOMEZ
第二个数据框是df2
。它还包含一个变量name
这将用于与name
from df1
。看起来像这样(在真实情况下df2
可以非常大,超过 1000 行):
df2
name val
1 JUANA MARQUEZ 1
2 FERNANDO ELIZAGA 2
3 IRMA GOMEZ 3
4 PABLO GONZALEZ 4
5 GINA LUCIO 5
6 MARK TORRES 6
7 LETICIA BLACIO 7
8 JUAN PABLO GIRON BELTRAN 8
我正在寻找一种方法来检查每一行是否df1
for name
变量包含或与任何值匹配name
in df2
。例如,值JUAN GIRON
检查后name
from df2
应该返回,给出一个值yes
因为它包含在字符串中JUAN PABLO GIRON BELTRAN
from df2
。同样的情况也适用于其他值。最后我想要这样的东西:
df3
name val
1 JUAN GIRON yes
2 GINA OLEAS no
3 JUAN FERNANDO ELIZAGA yes
4 MARCO TORRES no
5 JUAN PABLO GONZALEZ yes
6 IRMA GOMEZ yes
我怎样才能达到这个结果?我尝试过grepl()
使用连接字符串|
但它不起作用,因为某些值正在返回yes
不匹配时匹配。
另外,由于数据可能很大,我想有一个解决方案dplyr
因为比较是按行进行的,所以速度可能很慢。或者欢迎任何快速解决方案。非常感谢!
接下来是数据:
#df1
df1 <- structure(list(name = c("JUAN GIRON", "GINA OLEAS", "JUAN FERNANDO ELIZAGA",
"MARCO TORRES", "JUAN PABLO GONZALEZ", "IRMA GOMEZ")), row.names = c(NA,
-6L), class = "data.frame")
#df2
df2 <- structure(list(name = c("JUANA MARQUEZ", "FERNANDO ELIZAGA",
"IRMA GOMEZ", "PABLO GONZALEZ", "GINA LUCIO", "MARK TORRES",
"LETICIA BLACIO", "JUAN PABLO GIRON BELTRAN"), val = 1:8), row.names = c(NA,
-8L), class = "data.frame")