【发布时间】:2023-03-20 18:40:01
【问题描述】:
df1 = data.frame(Id = c(1:6), Product = c(rep("Toaster", 3), rep("Radio", 3)), Test = NA)
df2 = data.frame(Id = c(2, 4, 6, 7), State = c(rep("Alabama", 2), rep("Ohio", 2)))
df_sum <- anti_join(df1,df2, by = "Id") %>% bind_rows(df2)
是否有一种简单的方法可以生成 anti_join 的结果,以便结果中只存在 df1 的行。因此,例如,ID 为 7 的行将被丢弃在结果数据框中。我只能想到费力的解决方案。提前致谢。
结果表应如下所示:
【问题讨论】:
-
删除
%>% bind_rows(df2)部分,否则我不明白这个问题。anti_join(df1,df2, by = "Id")将只提供df1中不在df2中的行。如果这不是您期望的结果,您能否改写问题或提供您的预期结果。 -
如果您不想将 df2 绑定到您的数据上,为什么还要绑定它?
-
我猜你真的想要这个结果:
merge(df1, df2, all.x = T) -
这条线会给你你想要的:
anti_join(df1,df2, by = "Id") %>% bind_rows(df2) %>% filter(Id %in% df1$Id)