Citirea culorii de fundal a unui fișier XLSX într -un mod ordonat cu Readxl

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

(Acest articol a fost publicat pentru prima dată pe pacha.dev/blogși a contribuit cu drag la R-Bloggers). (Puteți raporta problema despre conținutul de pe această pagină aici)


Doriți să vă împărtășiți conținutul pe R-Bloggers? Faceți clic aici dacă aveți un blog sau aici dacă nu.

Din cauza întârzierilor cu plata bursei mele, dacă această postare vă este utilă, vă cer cu drag o donație minimă pentru a -mi cumpăra o cafea. Acesta va fi folosit pentru a continua eforturile mele open source. Explicația completă este aici: un mesaj personal de la un contribuabil open source. Dacă cântați la chitară electrică, același haos de bursă m -a determinat să -mi transform pedalele de chitară și kiturile de bricolaj hobby într -o afacere și le puteți verifica aici.

A trebuit să citesc câteva fișiere XLSX (Microsoft Excel) pentru un proiect de consultanță pe care îl conduc acum în Chile, când am găsit un sever Problema organizării datelor. În loc să codifice municipalitățile dintr -un district ca:

Distrito    Circunscripción Provincial  Comuna
14        Talagante                     Talagante
14        Talagante                     El Monte
14        Talagante                     Isla de Maipo
14        Talagante                     Padre Hurtado
14        Talagante                     Peñaflor
...

Unele foi din fișiere au folosit mai multe culori de fundal pentru a indica districtul la care fiecare municipalitate („Comuna”) aparține atunci când vine vorba de a defini cine este Congresul pentru acea municipalitate (Map Congressperson-municipalitate este un 1-to-many atunci când primarul hărții primar-municipalitate este de la 1 la 1).

Acest mod de a reprezenta informații este rău pentru toată lumea. Nu este clar pentru cititor și este mai mult consumator de timp pentru care a creat fișierul. O resursă bună despre organizarea de date adecvată cu foi de calcul este organizarea de date în foile de calcul de Karl Broman și Kara Woo pe care le sugerez studenților mei în fiecare semestru.

Gândiți -vă la setul de date GapMinder. Dacă în loc de asta:

Obțineți asta:

Apoi, aveți nevoie de informații suplimentare care nu sunt prezente în fișier pentru a cunoaște continentul pentru fiecare țară. Acest lucru nu este atât de rău, dar este pentru informații mai specifice (de exemplu, gândiți -vă la codul telefonic internațional).

Am căutat online și am găsit câteva soluții greoaie de acum aproape zece ani folosind pachetul XLSX. Nu sunt mulțumit de acestea, am folosit cunoștințele mele C ++ obținute în ECE244 și am făcut unele modificări la pachetul Readxl.

Schimbarea adaugă un plus extract_colors parametru la read_excel()și permite să facă acest lucru:

# extract_colors = FALSE (default)
good_data <- read_excel(file, sheet = "good")

> good_data                                                                   
# A tibble: 142 × 6
   country                  continent  year lifeExp      pop gdpPercap
                                        
 1 Algeria                  Africa     2007    72.3 33333216     6223.
 2 Angola                   Africa     2007    42.7 12420476     4797.
 3 Benin                    Africa     2007    56.7  8078314     1441.
 4 Botswana                 Africa     2007    50.7  1639131    12570.
 5 Burkina Faso             Africa     2007    52.3 14326203     1217.
 6 Burundi                  Africa     2007    49.6  8390505      430.
 7 Cameroon                 Africa     2007    50.4 17696293     2042.
 8 Central African Republic Africa     2007    44.7  4369038      706.
 9 Chad                     Africa     2007    50.7 10238807     1704.
10 Comoros                  Africa     2007    65.2   710960      986.
# ℹ 132 more rows
# ℹ Use `print(n = ...)` to see more rows
bad_data <- read_excel(file, sheet = "bad", extract_colors = TRUE)

> bad_data                                                                    
# A tibble: 142 × 6
   country                   year lifeExp      pop gdpPercap country_bg
                                         
 1 Algeria                   2007    72.3 33333216     6223. #FF6600   
 2 Angola                    2007    42.7 12420476     4797. #FF6600   
 3 Benin                     2007    56.7  8078314     1441. #FF6600   
 4 Botswana                  2007    50.7  1639131    12570. #FF6600   
 5 Burkina Faso              2007    52.3 14326203     1217. #FF6600   
 6 Burundi                   2007    49.6  8390505      430. #FF6600   
 7 Cameroon                  2007    50.4 17696293     2042. #FF6600   
 8 Central African Republic  2007    44.7  4369038      706. #FF6600   
 9 Chad                      2007    50.7 10238807     1704. #FF6600   
10 Comoros                   2007    65.2   710960      986. #FF6600

În acest fel, putem grupa țările cumva, iar una dintre numeroasele posibilități este de a converti country_bg la un factor cu cinci categorii (de exemplu, o culoare pe continent) cu:

library(dplyr)

bad_data %>%
  mutate(country_bg = as.factor(country_bg))

sau potrivirea codurilor hexagonale cu un șir:

bad_data %>%
  inner_join(
    bad_data %>%
      distinct(country_bg) %>%
      mutate(
        continent = case_when(
          country_bg == "#FF6600" ~ "Asia",
          country_bg == "#99CCFF" ~ "Europe",
          country_bg == "#FFFFCC" ~ "Africa",
          country_bg == "#993366" ~ "Americas",
          country_bg == "#666699" ~ "Oceania",
          TRUE ~ NA_character_
        )
      )
  )

Sper că acest lucru este util!

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.