数据帧1(df1)包含以下列:
Year ID1 ID2 V1 V2 ....
数据帧2(df2)包含以下列:
Year ID
除了在ID1或ID2中ID匹配的df1中保留观察值之外,我想使用df2进行一次半联接以按Year和ID过滤df1。我不确定dplyr的semi_join是否可以做到这一点,或者是否需要其他方法。
编辑:
df1 = data.frame(Year = c(rep(2000,5), rep(2001,5)),
ID1 = 1:5,
ID2 = 5:1,
V1 = seq(1,10, length.out = 10))
df2 = data.frame(Year = c(2000,2000,2001,2001), ID = c(1,2,1,3))
输出
Year ID1 ID2 V1
2000 1 5 1
2000 2 4 2
2000 4 2 4
2000 5 1 5
2001 1 5 6
2001 3 3 8
2001 5 1 10
答案 0 :(得分:2)
这不太好,但是您可以分别对每个ID进行半联接,然后合并结果:
bind_rows(
semi_join(df1, df2, by = c("ID1" = "ID"),
semi_join(df1, df2, by = c("ID2" = "ID")
) %>%
distinct()
(未经测试,没有数据集样本。)