如何合并两个csv文件,删除重复项并在R中创建新列?

时间:2019-11-25 18:53:22

标签: r dplyr

这是一个非常简单的问题,但是我无法在其他帖子中找到答案。例如: -Merging two dataframes, removing duplicates and aggregation in R -Merge two dataframes with repeated columns

两个csv文件都具有相同的列名(例如,名称,电子邮件,状态等)。第一个csv是名称和电子邮件的主列表。第二个是已对事件进行RSVP的个人列表。我想合并两个数据帧,删除所有重复项,然后进行变异以为RSVP ==“ yes / no”创建一个新列。我想您在此问题中使用了dplyr的功能之一,但不确定是full_join()还是inner_join()。举个例子:

  status          names           email   company
1 invited     John Smith  john@email.com Company A
2 invited   Abbi Maureen  abbi@email.com Company B
3 invited       Sara Doe  Sara@email.com Company C
4 invited Maria Gonzalez maria@email.com Company D
5 invited  Frank Russell frank@email.com Company E

第二个csv是确认出席的个人列表,其身份标记为RSVP

 status        names          email   company
1   RSVP Abbi Maureen abbi@email.com company B
2   RSVP   John Smith john@email.com Company A

我在确定如何最好地合并这两个数据帧,删除所有重复项然后创建一个新列(即,RSVP是,否)上停留?是full_join然后变异吗?

1 个答案:

答案 0 :(得分:1)

因此,我的考虑方式是,邀请数据框(称为df1)具有所需的大部分数据,并且您希望从RSVP数据框(称为df2)添加特定的新唯一信息。您需要标识一个键以在df1和df2之间形成人行横道。在这种情况下,电子邮件是唯一密钥。现在,将解决方案放在一起...

首先获取要添加的密钥和新信息

df2<-df2 %>%
  select(email, status)

然后进行左连接,并使用RSVP进行变异以创建新列

merged_df<-df1 %>%
  left_join(df2, by="email") %>%
  mutate(RSVP=if_else(status=="RSVP","yes","no"))

或者您可以通过正确的连接一步一步完成所有操作

merge_df<-df2 %>%
  select(email, status) %>%
  right_join(df1, by="email") %>%
  mutate(RSVP=if_else(status=="RSVP","yes","no"))