首页 > 解决方案 > 使用 dplyr - R 合并两个 csv 文件以从输出文件中删除重复项

问题描述

我有两个 CSV 文件:一个文件包含我们尚未调查的调查对象的联系信息,另一个 csv 文件包含我们已经联系的调查对象的信息。我需要为我们未联系过的联系人创建一个新的 csv 文件,我相信我可以通过合并 R 中的两个文件并创建一个新文件来完成此操作,该文件排除已通过 R 联系过的调查受访者。我对 R 和想提高我的技能,但这项任务有点过头了,希望有任何帮助或建议

标签: rdplyrmerge

解决方案


因此,由于我不知道您的数据,我们假设您已经使用read.csv(). df1是第一个包含所有人及其联系信息的数据集。df2包含他们的答案。两者共享存储在“customer_ID”列中的相同 ID(没有唯一 ID,这将不起作用,但可能您必须重命名一两列)。

# this is my dummy data
df1 <- data.frame("customer_ID" = 1:100,
                  "address" = rep(c("saturn", "mars"), 25))
df2 <- data.frame("customer_ID" = c(1:25, 75:99),
                  "likes_apples" = rep(c(TRUE, FALSE), 50))

您可以从两个表中提取 ID 并将它们组合起来。我将其转换为数据框,以便我们可以使用 dplyr。

df_combined <- data.frame("customer_ID" = c(df1$customer_ID, df2$customer_ID))

当您将 ID 放在一起时,您可以按“customer_ID”对数据进行分组,并计算每组的数据点数。您只存储那些只出现一次的 ID。

once_only <- df_combined %>%
  group_by(customer_ID) %>%
  filter(n() == 1)

然后,您可以使用有关 ID 是否包含在过滤的数据点中的联系信息过滤数据框:

df1[df1$customer_ID %in% once_only$customer_ID,]

我敢打赌,有很多更好的方法可以做到这一点,但我希望它有所帮助!

编辑:好的,所以我显然从评论中学到了一些新东西。更简单的方法是:

anti_join(df1, df2, by="customer_ID")

推荐阅读