我正在处理一些我们分类失败的数据,并按批次计算每个分类箱的有限产量。
我有一个描述分类箱的元表。 行按升序排列,一些排序标签带有非语法名称。
sort_tbl <- tibble::tribble(~weight, ~label,
0, "fail A",
0, "fail B",
0, "fail C",
100, "pass")
> sort_tbl
# A tibble: 4 x 2
weight label
<dbl> <chr>
1 0 fail A
2 0 fail B
3 0 fail C
4 100 pass
我有一个按分拣箱限制产量的数据表,每批一行,每个分拣箱一个列。因为这个表是从一个转置构造的,所以我们得到了一个特定排序从未发生过很多的实例,结果值为NA
. 请注意,此表中的列按测试降序排列。
yld_tbl <- tibble::tribble( ~lot, ~pass, ~`fail C`, ~`fail B`, ~`fail A`,
"lot1", NA, NA, 0.00, NA,
"lot2", NA, 0.00, 0.80, NA,
"lot3", 0.49, NA, 0.50, 0.98,
"lot4", 0.70, 0.95, 0.74, 0.99)
> yld_tbl
# A tibble: 4 x 5
lot pass `fail C` `fail B` `fail A`
<chr> <dbl> <dbl> <dbl> <dbl>
1 lot1 NA NA 0.00 NA
2 lot2 NA 0.00 0.80 NA
3 lot3 0.49 NA 0.50 0.98
4 lot4 0.70 0.95 0.74 0.99
一些缺失值意味着 100% 的有限收益率,而另一些则反映了未定义的值,因为我们在流程的早期是零收益率。我的任务是酌情用 's替换前一组。NA
1.00
完成此操作的一种算法从左到右(降序测试顺序)替换NA
为1.00
if 随后的有限产量不是NA
。在示例数据集的第一行中,我们没有更改,fail C
因为pass
缺少。但是我们确实替换fail A
为1.00
因为fail B
没有丢失。
正确的示例输出为:
> fill_ones(yld_tbl, sort_tbl)
# A tibble: 4 x 5
lot pass `fail C` `fail B` `fail A`
<chr> <dbl> <dbl> <dbl> <dbl>
1 lot1 NA NA 0.00 1.00
2 lot2 NA 0.00 0.80 1.00
3 lot3 0.49 1.00 0.50 0.98
4 lot4 0.70 0.95 0.74 0.99