繁体   English   中英

半连接有条件地过滤R数据帧

[英]Semi_join filtering an R dataframe conditionally

数据帧1(df1)包含以下列:

Year ID1 ID2 V1 V2 ....

数据帧2(df2)包含以下列:

Year ID 

我想使用df2进行一次Semi_join,以按Year和ID过滤df1,但我想将观察结果保留在df1中,其中ID匹配ID1或ID2。 我不确定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

这不太好,但是您可以分别对每个ID进行半联接,然后合并结果:

bind_rows(
  semi_join(df1, df2, by = c("ID1" = "ID"),
  semi_join(df1, df2, by = c("ID2" = "ID")
) %>%
  distinct()

(未经测试,没有数据集样本。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM