#227–228

Puzzle-uri
Autor: ExcelBI
Toate fișierele (xlsx cu puzzle și R cu soluție) pentru fiecare puzzle sunt disponibile pe Github-ul meu. Bucurați-vă.
Puzzle #227




Ni se oferă două tabele unul cu datele angajaților, iar al doilea cu repartizarea condiționată a salariului. Există un fel de expresie regulată acolo, dar nu în notația oficială, ci mai degrabă care oferă puterea asteriscului lui Joker – înlocuiți unul sau mai multe caractere. Deoarece această notație de substituent nu poate fi folosită în R, am făcut unele modificări în tabelul T2 folosind așa cum l-am numit BRAIN.API (propria mea minte :D). Verifică ce a fost mai târziu.
Se încarcă biblioteci și date
library(tidyverse) library(readxl) path = "Power Query/PQ_Challenge_227.xlsx" input1 = read_excel(path, range = "A2:D13") input2 = read_excel(path, range = "F2:H6") test = read_excel(path, range = "J2:N11") %>% arrange(Sequence, Name)
Transformare
input2 = input2 %>%
mutate(pattern_seq = c("^1.*", "321", ".*", ".*8$"),
pattern_name = c("^M.*", "^S.*", ".*(aA)$", ".*"))
input = input1 %>%
cross_join(input2) %>%
mutate(check_seq = str_detect(string = Sequence.x, pattern = pattern_seq),
check_name = str_detect(string = Name.x, pattern = pattern_name),
both_conditions = check_seq & check_name) %>%
filter(both_conditions) %>%
select(Sequence = Sequence.x,Name = Name.x, Weight, `Bonus %`, Salary) %>%
arrange(Sequence, Name)


Validare
all.equal(input, test, check.attributes = FALSE) #> (1) TRUE
Puzzle #228




Uneori, mesele au nevoie de ceva întindere și strângere… și unele întinderi din nou. Mai ales când există mai multe anteturi disponibile. Din fericire avem pachet special pentru astfel de cazuri: unpivotr. Trebuie să „decapitatem” niște coloane și rânduri și apoi le-am pune în ordine pe care toți acceptăm să le urmăm.
Se încarcă biblioteci și date
library(tidyverse) library(readxl) library(unpivotr) path = "Power Query/PQ_Challenge_228.xlsx" input = read_excel(path, range = "A1:H5", col_names = F) test = read_excel(path, range = "J1:M20") %>% arrange(Category, Student, Value)
Transformare
result = input %>%
as_cells() %>%
behead("left", "Student") %>%
behead("up-left", "Category") %>%
behead("up", "Value") %>%
select(Student, Category, Value, Marks = chr) %>%
mutate(Marks = as.integer(Marks)) %>%
na.omit() %>%
arrange(Category, Student, Value)


Validare
all.equal(result, test, check.attributes = F) #> (1) TRUE
Simțiți-vă liber să comentați, să distribuiți și să mă contactați cu sfaturi, întrebări și ideile dvs. despre cum să îmbunătățiți orice. Contactați-mă și pe Linkedin dacă doriți.
![]()
![]()
PowerQuery Puzzle rezolvat cu R a fost publicat inițial în Numbers around us on Medium, unde oamenii continuă conversația subliniind și răspunzând la această poveste.
