r - 如何使用 R 中的姓名、性别、种族和粗略估计的年龄跨大型数据集进行匹配
问题描述
我有 2 个数据集,每个数据集大约 20k 行。
df 1 包含以下信息
名字 | 姓氏 | 种族 | 性别 | 出生年份| 唯一身份
df2 包含以下内容
名字 | 姓氏 | 种族 | 性别 | 年龄
我想加入数据集,以便为 DF 2 中的每一行相关行获得一个唯一 ID。问题是由于这些数据是纵向的,因此有些人在 df2 中多次使用并且有多个年龄。例如
John | smith | white | male | 29
John | smith | white | male | 30
而 df1 包含以下内容
John | smith | white | male | 1991 | 74b23
最终我希望数据看起来像这样
John | smith | white | male | 29 | 74b23
John | smith | white | male | 30 | 74b23
有没有办法返回名字,姓氏,种族和性别的完全匹配,但年龄匹配或需要一年?
谢谢!
解决方案
library(data.table)
df1 <- data.table(f.name = "John",
l.name = "Smith",
race = "white",
gender = "male",
b.year = 1991,
ID = "74b23")
df2 <- data.table(f.name = "John",
l.name = "Smith",
race = "white",
gender = "male",
age = c(29, 30))
df1[, age := year(Sys.Date())-b.year]
setkeyv(df1, c("f.name", "l.name", "race", "gender", "age"))
setkeyv(df2, c("f.name", "l.name", "race", "gender", "age"))
df3 <- df1[df2, roll = "nearest"]
“roll”值使用 setkeyv 中提供的最后一列,在本例中为年龄。
> df3
f.name l.name race gender b.year ID age
1: John Smith white male 1991 74b23 29
2: John Smith white male 1991 74b23 30
推荐阅读
- css - 集成视频 youtube
- python - 如何使用字符串调用列表中对象的值
- android - 带有皮肤的 BottomSheetDialogFragment 主题
- python - 如何将响应映射到scapy中的请求
- python-3.x - 使用子进程运行 LUA 脚本
- c# - 对象的属性是否在 C# 中与对象一起被垃圾收集,或者它们具有单独的 gc 机制
- python - 如何使用日志值向 Pandas 数据框添加新列
- .net-core - dotnet 控制台应用程序,使用通用主机,HostedService,Windows 任务计划程序保持运行状态
- java - 类图的实现
- sql-server - 使用 SQL 后端的 Access 查询中出现无法解释的“无效操作”错误