Je suis en train de manipuler des données où nous trions les échecs dans des bacs et calculons des rendements limités pour chaque bac de tri par lot.
J'ai une méta-table qui décrit les bacs de tri. Les lignes sont classées dans l'ordre croissant des tests et certaines des étiquettes de tri portent des noms non syntaxiques.
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
J'ai un tableau de données de rendement limité par bac de tri. avec une ligne par lot et une colonne pour chaque case de tri. Comme cette table a été construite à partir d'une transposition, nous obtenons des cas où un tri particulier n'a jamais eu lieu pour un lot et la valeur résultante est la suivante NA
. Notez que les colonnes de ce tableau sont classées dans l'ordre décroissant des tests.
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
Certaines des valeurs manquantes impliquent un rendement limité à 100% tandis que d'autres reflètent une valeur indéfinie parce que nous sommes à rendement nul plus tôt dans le flux. Ma tâche consiste à remplacer l'ancien groupe de NA
avec 1.00
le cas échéant.
Un algorithme pour y parvenir fonctionne de gauche à droite (ordre décroissant des tests) en remplaçant NA
con 1.00
si le rendement limité ultérieur n'est pas NA
. Dans la première ligne de l'ensemble de données de l'exemple, nous ne changeons rien. fail C
desde pass
est manquant. Mais nous remplaçons fail A
con 1.00
desde fail B
ne manque pas.
L'exemple de sortie correct serait :
> 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