r - 如果数据框 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
解决此问题的最佳方法是什么?
解决方案
这是一个连接或合并操作。在这种情况下,左连接:
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"))
推荐阅读
- mongoose - 将对象数组添加到突变 react-graphql-apollo-mongoose 时,“无法读取未定义的属性 'get'”
- python - 张量流无法导入
- python - 传递给参数“shape”的值的数据类型 float32 不在允许值列表中:int32、int64
- amazon-web-services - AWS S3 超出限制 - 如何更改层类型?
- node.js - 使用Nodejs将JSON对象存储在MySql2的JSON列中
- entity-framework - 实体框架核心迁移
- java - 使用@OneToMany 或@ManyToMany 定位未映射的类(多数据库连接)
- javascript - $filter() 如何在 angularjs 内部工作?
- android - CardView 默认高程值
- flutter - 错误:在初始化程序中只能访问静态成员