首页 > 解决方案 > 如果数据框 A 和 B 中的两个值匹配,如何将数据框 B 中的数据分配给数据框 A 中的列?

问题描述

让我更清楚地解释我的问题。假设我有两个数据框,A 和 B,它们看起来像这样。

Dataframe A 
   Names    Email
1   John    a@a.com
2   Harry   b@b.com 
3   Amy     c@c.com
4   Jim     d@d.com
5   Chad    e@e.com

Dataframe B 
   Email    Category
1  q@q.com  Student
2  z@z.com  Faculty
3  h@h.com  Alumni
4  c@c.com  Student
5  a@a.com  Alumni

我的目标是在数据框 A 中创建一个名为 Category 的新列,如果 A$Email 中的值与 B$Email 中的任何值匹配,则该列的值等于 B$Category,否则为 NA。这是我的理想输出

Dataframe A
   Names    Email     Category
1   John    a@a.com   Alumni
2   Harry   b@b.com   NA
3   Amy     c@c.com   Student
4   Jim     d@d.com   NA
5   Chad    e@e.com   NA

解决此问题的最佳方法是什么?

标签: r

解决方案


这是一个连接或合并操作。在这种情况下,左连接:

merge(dfA, dfB, by.x = "Email", all.x = TRUE)
#     Email Names Category
# 1 a@a.com  John   Alumni
# 2 b@b.com Harry     <NA>
# 3 c@c.com   Amy  Student
# 4 d@d.com   Jim     <NA>
# 5 e@e.com  Chad     <NA>

了解它以及如何在一般情况下和 R 中使用它的两个很好的链接:


数据:

dfA <- structure(list(Names = c("John", "Harry", "Amy", "Jim", "Chad"), Email = c("a@a.com", "b@b.com", "c@c.com", "d@d.com", "e@e.com")), class = "data.frame", row.names = c("1", "2", "3", "4", "5"))
dfB <- structure(list(Email = c("q@q.com", "z@z.com", "h@h.com", "c@c.com", "a@a.com"), Category = c("Student", "Faculty", "Alumni", "Student", "Alumni")), class = "data.frame", row.names = c("1", "2", "3", "4", "5"))

推荐阅读