比较不同数据帧r中的字符串和列

比较不同数据帧r中的字符串和列,r,R,我有一个数据框,由在欧盟工作的科学家组成,格式如下: Author ID Country Year A 12345 UK 2011 B 13254 Germany 2018 C 54952 Belgium 2005 D 58774 UK 2009 E 88569 Italy 2015 ... 然后,我有另一个数据框,其中包含来自美国的科学家,格式相同。现在,我要做的是为US dataframe添加一个新

我有一个数据框,由在欧盟工作的科学家组成,格式如下:

Author ID     Country Year
A      12345  UK      2011
B      13254  Germany 2018
C      54952  Belgium 2005
D      58774  UK      2009
E      88569  Italy   2015
...
然后,我有另一个数据框,其中包含来自美国的科学家,格式相同。现在,我要做的是为US dataframe添加一个新列,在该列中,我将US dataframe中的每个ID与EU dataframe中的所有ID进行比较。每次有匹配项时,我希望在新列中显示1,对于不在EU集中的每个ID,显示0

到目前为止,我相当确定我的解决方案应该包含
mapply
,并且我可以使用以下方法“加载”ID号的值:

mapply(function(i, j) length(grep(i, j)), df_EU$ID, df_US$ID)
然而,我对如何从这里开始感到迷茫。我从未真正使用过函数,因此非常感谢您的帮助!多谢各位


另一个问题是,科学家们可能会在每个数据帧中出现多次,因为他们不是按其唯一的名字列出的,而是按各自区域出现的出版物列出的。

这里,我们可以使用
regex\u fuzzy\u join

library(fuzzyjoin)
df_US <- regex_left_join(df_US, df_EU %>%
                            select(ID), by = 'ID') %>%
             mutate(EU_migration = !is.na(ID.y))
库(fuzzyjoin)
df_US%
选择(ID),按='ID')%>%
突变(EU_迁移=!is.na(ID.y))

这些数据帧的维度相同,ID的数量相同,那么只有
mapply
可以工作。不幸的是,不同的数据帧具有不同的行数。列的数量和名称是一样的,为什么不绑定它们呢
dplyr::left_join(df_EU,df_US,by=“ID”)
或者可能是
dplyr::intersect()
您只是想看看是否有任何通用的、精确的ID?如果是这样的话,就用
%in%
df_US$in_EU@Andrew这正是我一直在寻找的东西!:)我是否需要以某种方式分配它,或者这会为我生成一个全新的数据帧?因为我试图用df_US$EU_migration@P.Weyh来分配这个函数在我脑海中生成的附加列,如果你想将一个列命名为'EU_migration
,那么
df_US%select(ID),by='ID')%%>%mutate(EU_migration=!is.na(ID.y))`好的,我试过了,但出于某种原因,代码多次(1-8次)计算一些命中率。如果有帮助的话,我可以给你数据,但是它太大了,不能用
dput
发布在这里。谢谢你的指导@P.我使用了
regex\u left\u join
只是因为你的
grep
。如果完全匹配,则%
中的
%appropriate@P.Weyh没关系。使用
dplyr
,它将是
df_US%变异(EU_migration=as.integer(ID%在%df_EU$ID中))