基于时间区间匹配为df2关联实验信息:fuzzy join遇NA问题排查
解决fuzzyjoin匹配后全NA的问题
我看了你的代码,发现导致df3中ExperimentID全为NA的核心问题有两个:
1. 数据框d的列名不匹配
你生成d的时候,inner_join后原来的Dev.Date.Time列被自动命名为Dev.Date.Time.x(来自startTime)和Dev.Date.Time.y(来自endTime),但你在fuzzy_right_join里却引用了不存在的StartTime和EndTime列,这直接导致匹配逻辑失效。
2. 模糊连接的方向和匹配逻辑对应错误
你用了fuzzy_right_join(d, df2, ...),但我们的目标是给df2的每个时间点匹配对应的实验信息,应该以df2为主表,同时匹配条件的对应关系需要调整。
修正步骤和代码
首先,先给d的列重命名,明确起止时间的列名:
library(dplyr) # 重命名d的列,明确起止时间 d <- d %>% rename(StartTime = Dev.Date.Time.x, EndTime = Dev.Date.Time.y)
然后用fuzzy_left_join实现时间范围匹配,确保df2的每个时间点都能找到对应的实验区间:
library(fuzzyjoin) # 执行模糊左连接,匹配时间在[StartTime, EndTime]范围内的实验记录 df3 <- fuzzy_left_join( df2, d, by = c("Dev.Date.Time" = "StartTime", "Dev.Date.Time" = "EndTime"), match_fun = list(`>=`, `<=`) )
验证效果
你可以查看df3的前几行,会发现ExperimentID和ExperimentType已经正确匹配到对应的时间点了:
head(df3)
另外,因为你不需要移除无实验的时间段,ExperimentType为NoExperiment的区间也会被正常匹配,符合你的需求。
内容的提问来源于stack exchange,提问作者HCAI
相关产品推荐
相关产品推荐

