R语言实现:表B存在非零值时替换表A对应零值并标记替换项
R语言table按规则替换零值并标记替换位置
实现逻辑
仅当同时满足两个条件时执行替换:
- tableA对应位置值为0
- tableB对应位置值为非零
其余所有位置保留tableA的原始值,同时自动记录所有发生替换的单元格位置。
最简实现代码
# 复制原tableA生成结果表,不修改原始数据 res <- tableA # 定位所有符合替换规则的单元格坐标 replace_idx <- which(tableA == 0 & tableB != 0, arr.ind = TRUE) # 执行值替换 res[replace_idx] <- tableB[replace_idx]
运行后打印res即可得到期望输出:
A B C 0.3 0 0 3 0.4 1 6 2 0.6 6 0 0
替换位置识别方法
代码中生成的replace_idx对象直接存储了所有发生替换的单元格行列索引,直接运行查看即可:
row col 0.4 2 1 0.4 2 3
输出对应本案例中2个被替换的位置:行标签为0.4、列标签为A的单元格,以及行标签为0.4、列标签为C的单元格。
如果需要长期保留替换标记,可以直接把坐标作为属性附加到结果表上:
attr(res, "替换位置记录") <- replace_idx
后续随时调用attr(res, "替换位置记录")就能查询所有被替换的位置,不会和原始数值混淆。
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

