【发布时间】:2019-08-28 15:53:39
【问题描述】:
我有一个数据框df_EU,由在欧盟工作的科学家组成,格式如下:
Author ID Country Year
A 12345 UK 2011
B 13254 Germany 2018
C 54952 Belgium 2005
D 58774 UK 2009
E 88569 Italy 2015
...
然后,我有另一个数据框,其中包含来自美国的科学家df_US,格式相同。现在,我要做的是为美国数据帧添加一个新列,在其中我将美国数据帧中的每个 ID 与欧盟数据帧中的所有 ID 进行比较。每次匹配时,我希望在新列中出现一个 1,对于每个不在 EU 集中的 ID,一个 0。
到目前为止,我相当确定我的解决方案应该包含mapply,并且我从this question 中扣除了我可以使用以下方法“加载”ID 号的值:
mapply(function(i, j) length(grep(i, j)), df_EU$ID, df_US$ID)
然而,我对如何从这里开始感到很迷茫。我从未真正使用过函数,因此非常感谢您的帮助!非常感谢。
另一个问题是,科学家可能会在每个数据帧中出现多次,因为他们不是按其唯一名称列出,而是按在相应地区出现的出版物列出。
【问题讨论】:
-
这些是相同尺寸和相同数量的“ID”,那么只有
mapply有效。 -
不幸的是,不同的数据帧有不同的行数。列数和列名相同
-
你为什么不直接绑定它们呢?
dplyr::left_join(df_EU, df_US, by="ID")或者dplyr::intersect() -
您是否只是在寻找是否有任何常见的、准确的 ID?如果是这样,只需使用
%in%:df_US$in_EU <- as.integer(df_US$ID %in% df_EU$ID)。请记住,如果您有的话,这也将匹配NA的 -
@Andrew 这正是我一直在寻找的! :)
标签: r