Puzzle PowerQuery rezolvat cu R

URMĂREȘTE-NE
16,065FaniÎmi place
1,142CititoriConectați-vă

#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.

Dominic Botezariu
Dominic Botezariuhttps://www.noobz.ro/
Creator de site și redactor-șef.

Cele mai noi știri

Pe același subiect

LĂSAȚI UN MESAJ

Vă rugăm să introduceți comentariul dvs.!
Introduceți aici numele dvs.