2. 多批次配方实验数据合并与去重
多批次数据合并的核心问题
多个批次分别记录配方实验数据时,常见情况是:每个批次一张工作表或一个独立文件,字段结构大体相同,但记录顺序不同,且同一配方可能在不同批次中被重复录入。合并的目标不是简单堆叠,而是形成一张以“配方编号 + 实验日期”为唯一键的实验记录总表,并识别、去除重复记录。
本例使用以下教学示例数据(假设值,用于演示方法):
| 批次表 | 配方编号 | 实验日期 | 温度/℃ | 主料A/kg | 助剂B/kg | 收率/% |
|---|---|---|---|---|---|---|
| 批次1 | F-101 | 2024-03-05 | 80 | 12.0 | 0.50 | 92.1 |
| 批次1 | F-102 | 2024-03-06 | 85 | 10.5 | 0.40 | 90.3 |
| 批次2 | F-102 | 2024-03-06 | 85 | 10.5 | 0.40 | 90.3 |
| 批次2 | F-103 | 2024-03-08 | 78 | 11.2 | 0.45 | 91.0 |
| 批次3 | F-101 | 2024-03-05 | 80 | 12.0 | 0.50 | 92.1 |
| 批次3 | F-104 | 2024-03-09 | 82 | 9.8 | 0.35 | 89.6 |
其中 F-102/2024-03-06 在批次1与批次2中重复,F-101/2024-03-05 在批次1与批次3中重复。合并后应保留 4 条唯一记录。
合并前的字段对齐
合并前先确认各批次表的列名与顺序一致。若列名有差异(如“主料A/kg”与“主料A(kg)”),先统一列名再合并,否则会出现错列。日期列必须统一为同一格式,建议统一为 yyyy-mm-dd,避免“2024/3/5”与“2024-03-05”被当作不同键。
合并方式有两种:
- 手工复制:适合批次少、数据量小的情况,将各表数据依次粘贴到总表下方,并增加“来源批次”列便于追溯。
- Power Query 追加:适合批次多、需反复更新的情况。将各批次表作为查询追加后加载到工作表,后续新增批次只需刷新。
用公式识别重复记录
在合并中间表中增加辅助列,用拼接键判断重复。假设合并表数据从第2行开始,A列为配方编号,B列为实验日期,在F2输入:
=A2&"|"&TEXT(B2,"yyyy-mm-dd")
在G2统计该键出现次数:
=COUNTIF($F$2:$F$11,F2)
G列大于1的行即为重复记录。若要标记“保留首次、其余删除”,在H2输入:
=IF(COUNTIF($F$2:F2,F2)=1,"保留","重复")
该公式利用扩展区域 $F$2:F2 逐行扩大统计范围,第一次出现的键计为1,后续相同键计为2及以上,从而精确标记重复行。
去重与结果校验
筛选H列为“重复”的行并删除,剩余即为唯一记录。删除后需做三项校验:
- 行数校验:总表行数应等于唯一键数量。本例合并中间表10条,去重后6条。
- 键唯一性校验:对拼接键列再次使用
COUNTIF,最大值应为1。 - 数值一致性校验:对重复键对应的数值列(温度、主料、助剂、收率)做比对,若同一键下数值不一致,说明不是简单重复而是记录冲突,需人工确认保留哪条,不能直接删除。
同一“配方编号+实验日期”下若数值不同,属于冲突记录而非重复记录。直接去重会丢失信息,应先标记冲突并回溯原始批次表确认。
可复用的合并去重检查清单
| 检查项 | 判断标准 | 不通过时的处理 |
|---|---|---|
| 列名一致性 | 各批次表列名完全相同 | 统一列名后再合并 |
| 日期格式 | 全部为 yyyy-mm-dd | 用 TEXT 或分列统一格式 |
| 拼接键 | 配方编号|日期 无空值 | 补全缺失的编号或日期 |
| 重复标记 | COUNTIF 结果仅1或2 | 检查是否有格式差异导致误判 |
| 冲突识别 | 同键数值列一致 | 标记冲突行,人工确认 |
| 最终行数 | 等于唯一键数量 | 重新核对删除范围 |
完成上述步骤后,得到的唯一实验记录总表可直接作为后续组分归一化校验、配方版本关联查询等分析的输入底表。