如何在R中合并含ID的不等长数据集?附澳洲车祸数据示例代码需求
R语言合并两类澳洲车祸数据集的实现示例
没问题,我来帮你写一个R语言的合并示例代码。首先得明确:要合并两个数据集,必须有一个共同的关联键。根据你的描述,数据集B的ID是车祸发生日期,但数据集A的ID是类似d1、d2的标识——这里我假设两者的ID其实是对应的(比如d1对应某个具体日期,或者你可以调整字段名让它们共用同一个关联键)。下面我会先构造符合你描述的样本数据,再展示合并方法。
# 构造样本数据集A:包含ID、Area、Speed字段 dataset_a <- data.frame( ID = c("d1", "d2", "d3"), # 示例ID Area = c("悉尼", "墨尔本", "布里斯班"), Speed = c(50, 70, 60), stringsAsFactors = FALSE ) # 构造样本数据集B:每个车祸对应多条人员记录,包含ID(车祸日期)、性别、驾照类型 # 这里假设B的ID和A的ID是对应的(如果实际是日期,可替换为类似"2023-10-01"的字符串) dataset_b <- data.frame( ID = c("d1", "d1", "d2", "d3", "d3"), # 同一个ID对应多名涉事人员 涉事人员性别 = c("男", "女", "男", "女", "男"), 驾照类型 = c("正式驾照", "临时驾照", "正式驾照", "正式驾照", "临时驾照"), stringsAsFactors = FALSE )
方法一:使用dplyr包(推荐,代码更易读)
dplyr是tidyverse生态里的核心包,处理数据合并非常方便:
# 先安装并加载dplyr(如果还没安装的话) install.packages("dplyr") library(dplyr) # 左连接合并:保留dataset_a的所有记录,匹配dataset_b中对应的人员信息 dataset_c <- dataset_a %>% left_join(dataset_b, by = "ID") # 查看合并后的数据集 print(dataset_c)
方法二:使用Base R的merge函数
如果你不想加载额外的包,可以用base R自带的merge函数:
# 左连接合并,all.x=TRUE表示保留dataset_a的所有行 dataset_c_base <- merge(dataset_a, dataset_b, by = "ID", all.x = TRUE) # 查看结果 print(dataset_c_base)
关键参数说明
- 左连接(left_join/all.x=TRUE):会保留数据集A的所有车祸记录,即使该车祸在数据集B中没有对应的人员信息(此时性别和驾照类型字段会显示NA)。
- 如果只需要保留同时存在于两个数据集的车祸记录,可以用内连接(inner_join/merge默认参数)。
- 如果两个数据集的关联键字段名不同(比如A用"CrashID",B用"车祸日期"),可以调整连接参数:
- dplyr中:
left_join(dataset_b, by = c("CrashID" = "车祸日期")) - base R中:
merge(dataset_a, dataset_b, by.x = "CrashID", by.y = "车祸日期", all.x = TRUE)
- dplyr中:
内容的提问来源于stack exchange,提问作者user9111757
相关产品推荐
相关产品推荐

