这是一个非常简单的问题,但是我无法在其他帖子中找到答案。例如: -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然后变异吗?
答案 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"))