You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中通过列的部分文本匹配合并两个数据集?

基于部分字符串匹配合并R数据集的问题

我有两个R数据集DF1和DF2,示例如下:

DF1 <- data.frame(point_code = c("358/5/UW_001", "123/4/UW_002", "089/6/UW_003"),
                  value = c(10, 20, 30))

DF2 <- data.frame(Sample.Number = c("AT/ACE/1/1/358/5/DA/3", "AT/ACE/2/2/123/4/DA/4", "AT/ACE/3/3/89/6/DA/5"),
                     score = c(100, 200, 300))

注:两个数据集包含更多待合并的列

我需要通过匹配point_code中包含在Sample.Number里的部分代码(如358/5)来合并这两个数据集,期望输出如下:

point_code value Sample.Number score
1 358/5/UW_001    10 AT/ACE/1/1/358/5/DA/3   100
2 123/4/UW_002    20 AT/ACE/2/2/123/4/DA/4   200
3 089/6/UW_003    30 AT/ACE/3/3/89/6/DA/5   300

我尝试了两种方法,但都遇到问题:

方法一:提取匹配代码段

我尝试提取要匹配的ID代码部分:

DF1$match_code <- sapply(strsplit(DF1$point_code, "/"), function(x) paste(x[1:2], collapse = "/"))
DF2$match_code <- sapply(strsplit(DF2$Sample.Number, "/"), function(x) paste(x[5:6], collapse = "/"))

merged_data <- merge(DF2, DF1[, c("Lat", "Lon", "var1_P", "var2_P", "var3_P")], by = "match_code")

但存在代码数字位数不一致的问题,例如"089/6"与"89/6"无法匹配。

方法二:使用fuzzyjoin包的regex_left_join

尝试用fuzzyjoin包的regex_left_join函数,但出现报错:

merged <- regex_left_join(DF1, DF2, 
                          by = c(point_code = "Sample.Number"),
                          pattern = "(\\d+/\\d+)/")

Error in regex_left_join(phy, rawphyA, by = c(point_code = "ACE.Sample.Number"),  : 
  unused argument (pattern = "(\\d+/\\d+)/")

后续尝试了他人建议的方法,但仍未得到正确结果,输出出现观测值重复(如359/11)且行匹配错误:

Lat.x    Lon.x    point_code   Lat.y     Lon.y      Sample.Number
1   40.03039 28.87434  358/5/UW_001      NA        NA                   <NA>
2   41.25814 29.80981  358/7/UW_003 41.2581  29.80981  AT/ACE/1/1/358/7/DA/3
3   42.31510 31.03547  358/9/UW_005 42.3151  31.03547  AT/ACE/1/1/358/9/DA/3
4   43.23883 32.42131 359/11/UW_007 44.5039  34.72199 AT/ACE/1/1/359/19/DA/3
5   43.23883 32.42131 359/11/UW_007 42.8013  31.73753 AT/ACE/1/1/359/10/DA/3
6   43.23883 32.42131 359/11/UW_007 43.2388  32.42131 AT/ACE/1/1/359/11/DA/3
7   43.23883 32.42131 359/11/UW_007 43.7092  33.15066 AT/ACE/1/1/359/12/DA/3
8   43.23883 32.42131 359/11/UW_007 44.1538  33.90936 AT/ACE/1/1/359/13/DA/3
9   44.15381 33.90936 359/13/UW_009 44.5039  34.72199 AT/ACE/1/1/359/19/DA/3

请问有没有更高效且可行的方法实现基于部分字符串匹配的数据集合并?


内容的提问来源于stack exchange,提问作者Strobila

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 10:01:12