2 votes

Modifier certaines valeurs dans un cadre de données par référence indirecte aux colonnes

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X