首页 > 解决方案 > 如何将以下数据集合并为独立行?

问题描述

我想从两个现有的数据框创建一个新的数据框,它们共享名为名字、姓氏和电子邮件的列,但我希望以第二个数据框只粘在第一个数据框上的方式合​​并它们,以便创建我拥有的所有电子邮件的列表。数据框包含重复项,因此我希望保留它们以在下一步中继续消除它们。显然,我在下面发布的代码不起作用。有什么帮助吗?

first <- c("andrea","luis","mike","thomas")
last <- c("robinson", "trout", "rice","snell")
email <- c("andrea@gmail.com", "lt@gmail.com", "mr@gmail.com", "tom@gmail.com")



first <- c("mike","steven","mark","john", "martin")
last <- c("rice", "berry", "smalls","sale", "arnold")
email <- c("mr@gmail.com", "st@gmail.com", "ms@gmail.com", "js@gmail.com", "ma@gmail.com)
alz <- c(1,2,NA,3,4)
der <- c(0,2,3,NA,3)

all_emails <- data.frame(first,last,email)
no_contact_emails <- data.frame(first,last,email,alz,der)

df <- merge(no_contact_emails, all_emails, all = TRUE)

df <- df$email[!duplicated(df$email) & !duplicated(df$email, fromLast = TRUE)]

预期的输出将是一个包含所有电子邮件的连接数据集,除了 mike rice 的电子邮件,因为在重复的电子邮件中。

标签: rmergeduplicates

解决方案


您的可重现示例有点令人困惑,因此我为您制作了一个新示例,以查看这是否是您要查找的内容:

df1 <- data.frame(
    first = c("andrea","luis","mike","thomas"),
    last = c("robinson", "trout", "rice","snell"),
    email = c("andrea@gmail.com", "lt@gmail.com", "mr@gmail.com", "tom@gmail.com")
    )

df2 <- data.frame(
    first = c("mike","steven","mark","john", "martin"),
    last = c("rice", "berry", "smalls","sale", "arnold"),
    email = c("mr@gmail.com", "st@gmail.com", "ms@gmail.com", "js@gmail.com", 
    "ma@gmail.com")
    )

现在,使用 dplyr 有两种不同的方法可以做到这一点:

library(dplyr)

df1 %>%
   bind_rows(df2) %>%
   distinct(first, last, .keep_all = TRUE)

或者:

df1 %>%
   full_join(df2)

希望这可以帮助!


推荐阅读