【问题标题】:How to merge two csv files, remove duplicates and create a new column in R?如何合并两个 csv 文件,删除重复项并在 R 中创建一个新列?
【发布时间】:2020-03-21 03:10:17
【问题描述】:

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

两个 csv 文件具有相同的列名(例如,名称、电子邮件、状态等)。第一个 csv 是姓名和电子邮件的主列表。第二个是对某个活动进行了回复的个人列表。我想合并这两个数据框,删除所有重复项,然后变异为 RSVP ==“是/否”创建一个新列。我想你在这个问题中使用了 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然后变异?

【问题讨论】:

  • 如果打算在第一个数据集中创建一列,您可以使用left_join
  • df1$rsvp <- df1$name %in% df2$name 我认为您不需要为此加载复杂的外国库。
  • 我不清楚最终结果应该是什么。应该删除哪些重复项,哪些数据集需要新列?
  • @cory 你可以有两个同名的人。最好通过电子邮件发送,它必须是独一无二的。
  • 原意是合并两个数据框。这样做会创建重复的姓名(即,主列表中的一个人和回复的人相同)。我刚试过,我不确定left_join 解决了这个问题。

标签: r dplyr


【解决方案1】:

所以我的想法是,邀请数据框(我们称之为 df1)包含您想要的大部分数据,并且您想从 RSVPs 数据框添加特定的新唯一信息(我们称之为 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"))

【讨论】:

  • 请注意,您可以使用right_join()在一项作业中同时完成这两项工作
猜你喜欢
  • 1970-01-01
  • 2012-06-13
  • 2017-06-05
  • 2015-09-20
  • 2021-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-29
相关资源
最近更新 更多