„Word“ lentelių kūrimas naudojant „R“

Programa „R“ yra galingas įrankis, skirtas atlikti statistinę duomenų analizę. Šiame straipsnyje pademonstruosiu vieną būdą, skirtą „R“ data.frame lentelės pavidalu pateiktus analizės rezultatus išsaugoti kaip „Microsoft Word“ lentelę. Saugodami automatiškai ne tik sutaupysite laiko, bet ir išvengsite klaidų, kurių galėtų atsirasti rezultatus perrašant rankomis.

Straipsnyje pirmiausia paaiškinsiu atskirus kodo elementus, o pačiame gale rasite visą programos kodą, kuris be problemų veiks „Windows“ sistemoje. Tad pradėkime!

A. Reikiami „R“ paketai

Šiam darbui naudosime kelis „R“ paketus. Pirma, tidyverse šeimos paketų funkcijomis sukursime statistinę suvestinę, kuri bus data.frame klasės lentelė. Antra, flextable paketas bus reikalingas lentelę paversti į tokį formatą, kurį galima įrašyti į „Word“ dokumentą. Galiausiai paketo officer funkcijomis sukursime naują „Word“ dokumentą, į jį įkelsime lentelę ir, galiausiai, dokumentą išsaugosime.

A.1. Paketų diegimas

Jei šių paketų dar neturite, juos turėtumėte atsisiųsti iš saugyklos CRAN naudodami funkciją install.packages(). Tai tereikia padaryti vieną kartą.

# Paketų diegimas iš saugyklos CRAN
install.packages(c("tidyverse", "flextable", "officer"))

A.2. Paketų užkrovimas

Kai paketai jau mūsų kompiuteryje – juos užsikraukime, kad galėtume naudoti reikiamas funkcijas.

# Paketų užkrovimas
library(tidyverse)
library(flextable)
library(officer)

B. Nustatymai: lokalė

Lokale galime pavadinti nuo kalbos ir vietovės priklausomą programų parametrų ir savybių visumą. Mūsų lentelėje, kurią išsaugosime, bus lietuviškų raidžių. Tad norėdami, kad jos būtų užrašytos teisingai, nustatome lietuviškąją lokalę:

# Lokalės keitimas Windows sistemai
Sys.setlocale(locale = "Lithuanian")
# Lokalės keitimas Mac OS ir daugumai Linux sistemų
Sys.setlocale(locale = "lt_LT.UTF-8")
# Lokalės keitimas kai kurioms Linux versijoms
Sys.setlocale(locale = "lt_LT.utf8")

Jei tiksliai nežinote, kuris formatas tinka jūsų sistemai, įrašykite Sys.getlocale() ir pagal pavyzdį pasirinkite savo kompiuteriui tinkamą lokalės nustatymo būdą. Daugiau apie lokalių nustatymą galite skaityti „R“ dokumentacijoje.

C. Užsikraukime duomenis

Laikas įsikelti duomenis. Iliustracijai naudosime duomenų lentelę „PlantGrowth“ iš paketo datasets.

# Duomenų įkėlimas
data("PlantGrowth", package = "datasets")

Patyrinėkime, kaip šie duomenys atrodo – atspausdinkime kelias pirmąsias eilutes.

# Pirmosios eilutės
head(PlantGrowth)
##   weight group
## 1   4.17  ctrl
## 2   5.58  ctrl
## 3   5.18  ctrl
## 4   6.11  ctrl
## 5   4.50  ctrl
## 6   4.61  ctrl

Bei duomenų lentelės struktūrą.

# Duomenų lentelės struktūra
glimpse(PlantGrowth)
## Observations: 30
## Variables: 2
## $ weight <dbl> 4.17, 5.58, 5.18, 6.11, 4.50, 4.61, 5.17, 4.53, 5.33, 5...
## $ group  <fct> ctrl, ctrl, ctrl, ctrl, ctrl, ctrl, ctrl, ctrl, ctrl, c...

Čia matome eilučių („Observations“) ir stulpelių („Variables“) skaičių, stulpelių pavadinimus (jie rašomi po dolerio ženklo „$“), stulpeliuose esančių duomenų klases (tiksliau, sutrumpintus jų pavadinimus trikampiuose skliaustuose) bei kelias pirmąsias reikšmes.

D. Sudarykime suvestinę

Toliau sudarysime duomenų suvestinę, kuri bus data.frame klasės lentelė. Šiame pavyzdyje kiekvienai iš grupių apskaičiuosime grupės dydį, svorio (kintamojo weight) vidurkį ir standartinį nuokrypį naudodami paketo dplyr funkcijas group_by() ir summarize(). Funkcija rename() pervardinsime stulpelį group į Grupės pavadinimas – taip visi stulpeliai turės lietuviškus pavadinimus.

# Suvestinės skaičiavimas
suvestine <- 
    PlantGrowth %>% 
    group_by(group) %>%
    summarize("Grupės dydis" = n(),
              "Svorio vidurkis" = mean(weight),
              "Standartinis nuokrypis" = sd(weight))   %>% 
    rename("Grupės pavadinimas" = group)

Ši suvestinė atspausdinta žemiau (jei toks pateikimas atrodo per daug techniškas, tada pažiūrėkite, kaip ta pati lentelė pateikta sekančiame skyriuje). Pastebėkite, kad, grupės ctrl dydis yra 10, vidurkis – 5,03, standartinis nuokrypis – 0,58.

suvestine
## # A tibble: 3 x 4
##   `Grupės pavadinima~ `Grupės dydis` `Svorio vidurki~ `Standartinis nuokr~
##   <fct>                        <int>            <dbl>                <dbl>
## 1 ctrl                            10             5.03                0.583
## 2 trt1                            10             4.66                0.794
## 3 trt2                            10             5.53                0.443

Taip pat pastebėkite, kad lentelės klasė yra data.frame (tai rodo paskutinis pavadinimas):

# Objekto klasė
class(suvestine)
## [1] "tbl_df"     "tbl"        "data.frame"

Jei turite suvestinę, kuri nėra data.frame, tada toliau aprašytas būdas neveiks.

E. Paverskime lentelę į išsaugojimui tinkamą formatą

Prieš saugant į „Word“, lentelę reikia paruošti. Šiam tikslui naudojama funkcija regulartable() („įprasta lentelė“) iš paketo flextable. Papildomai galima naudoti funkciją autofit(), kuri optimizuoja lentelės dydį (eilučių aukštį ir stulpelių plotį).

suvestine_issaugojimui <- suvestine %>% regulartable() %>% autofit()

Parengta lentelė programoje „R“ gali būti atspausdinama peržiūros lange ir atrodo šitaip:

suvestine_issaugojimui

Grupės pavadinimas

Grupės dydis

Svorio vidurkis

Standartinis nuokrypis

ctrl

10

5.032

0.583

trt1

10

4.661

0.794

trt2

10

5.526

0.443

F. Skaičių apvalinimas

Pagal nutylėjimą, sveikieji skaičiai neapvalinami, o realieji skaičiai (skaičiai su kableliu) apvalinami 3 skaičių po kablelio tikslumu. Jei toks apvalinimas nėra tinkamas, apvalinimą galime nurodyti kiekvienam skaitiniam kintamojo tipui atskirai naudodami funkciją set_formatter_type().

Įprastai mums reikia nurodyti tik skaičių su kableliu apvalinimą. Jis apibrėžiamas tokia eilute :"%.6f". Joje % nurodo, kad tai formato aprašymo pradžia, f – kad tai fiksuotasis formatas, skaičius po taško – iki kelių skaičių po kablelio norime apvalinti. Mums pakanka pakeisti būtent šį skaičių naudojant parametrą fmt_double (fmt – formatas, double – trupmeninę dalį turintys skaičiai):

# Numatytasis formatas pagal duomenų tipą
suvestine_issaugojimui_apvalinta_1 <- 
    suvestine_issaugojimui %>% 
    set_formatter_type(fmt_double = "%.6f")  
suvestine_issaugojimui_apvalinta_1

Grupės pavadinimas

Grupės dydis

Svorio vidurkis

Standartinis nuokrypis

ctrl

10

5.032000

0.583091

trt1

10

4.661000

0.793676

trt2

10

5.526000

0.442573

Apvalinimą galime nurodyti ir kiekvienam pasirinktam kintamajam atskirai naudodami set_formatter(). Tada nurodomas kintamojo pavadinimas (kabutėse) ir tokios eilutės, kaip pavyzdyje. Keičiame tik skaitmenų po kablelio skaičių formato aprašyme. (Atkreipkite dėmesį, kad po paskutinio aprašymo kablelis nededamas.)

# Formatavimas kiekvienam kintamajam atskirai
suvestine_issaugojimui_apvalinta_2 <- 
    suvestine_issaugojimui_apvalinta_1 %>% 
    set_formatter( 
        "Svorio vidurkis"         = function(x) sprintf("%.2f", x),
        "Standartinis nuokrypis"  = function(x) sprintf("%.1f", x)
    )
suvestine_issaugojimui_apvalinta_2

Grupės pavadinimas

Grupės dydis

Svorio vidurkis

Standartinis nuokrypis

ctrl

10

5.03

0.6

trt1

10

4.66

0.8

trt2

10

5.53

0.4

Aišku, apvalinimas iki 6 skaičių po kablelio arba skirtingas vidurkio ir standartinio nuokrypio apvalinimas mūsų atveju yra neprasmingas. Tad toliau šių apvalinimų nenaudosime.

G. Lentelės išsaugojimas į „Word“

Toliau naudodami funkciją read_docx() (iš paketo officer) pradedame kurti naują „Word“ dokumentą. Funkcija body_add_flextable() prideda mūsų lentelę į šį dokumentą, o print() išsaugo „Word“ dokumentą kietajame diske (man keista, kad print() naudojama dokumentą išsaugoti, bet toks buvo paketų autorių pasirinkimas). Pastarosios funkcijos skliaustuose reikia nurodyti norimą dokumento pavadinimą, kurio plėtinys (paskutinės raidės po taško) būtų „.docx“, kaip šiame pavyzdyje:

dokumento_pavadinimas <-
    read_docx() %>% 
    body_add_flextable(suvestine_issaugojimui) %>% 
    print(target = "dokumentas_su_suvestine.docx")

Jei dokumentas išsaugomas, programa „R“ parašo aplanko bei paties dokumento pavadinimą. Tuo galite įsitikinti atspausdinę kintamąjį dokumento_pavadinimas.

Pastaba. Jei parašomas įspėjimas, kad dokumento nepavyksta išsaugoti, patikrinkite, ar nesate atidarę „Word“ dokumento jūsų pasirinktu pavadinimu (šiuo atveju „dokumentas_su_suvestine.docx“).

Įspėjimas! Jei jūsų pasirinktame aplanke jau yra „Word“ dokumentas tokiu pavadinimu, tai šis kodas be įspėjimo ištrins esantį dokumentą ir jo vietoje įrašys naująjį. Tad kai atidarysite „Word“ dokumentą ir redaguosite lentelę, rekomenduoju dokumentą su pakeitimais pervardinti.

H. „Word“ dokumento atidarymas

Išsaugoję lentelę atsidarykite „Word“ ir peržiūrėkite ją. „Word“ dokumentui atidaryti naudojamas toks kodas:

# Dokumento atidarymas
browseURL(dokumento_pavadinimas)

Rezultatas „Word“ dokumente atrodys šitaip:

Lentelė „Word“ dokumente.

Figure 1: Lentelė „Word“ dokumente.

Visas programos kodas

Pabaigai pateikiu visą programos kodą, skirtą „Windows“ vartotojams: jį nusikopijuokite, reikiamas vietas pakeiskite ir naudokite pagal savo poreikius.

# A. Paketų užkrovimas
library(tidyverse)
library(flextable)
library(officer)

# B. Analizės nustatymai
# (Lokalės keitimas Windows sistemai)
Sys.setlocale(locale = "Lithuanian")

# C. Duomenų įkėlimas
data("PlantGrowth", package = "datasets")

# D. Statistinė duomenų suvestinė
suvestine <- 
    PlantGrowth %>% 
    group_by(group) %>%
    summarize("Grupės dydis"           = n(),
              "Svorio vidurkis"        = mean(weight),
              "Standartinis nuokrypis" = sd(weight)) %>% 
    rename("Grupės pavadinimas" = group)

# E. Lentelės parengimas išsaugoti
suvestine_issaugojimui <-
    suvestine %>% 
    regulartable() %>% 
    autofit()

# F. Apvalinimas (jei reikia)
suvestine_issaugojimui <- 
    suvestine_issaugojimui %>% 

    # Numatytasis formatas pagal duomenų tipą
    set_formatter_type(fmt_double   = "%.3f") %>% 

    # Formatavimas kiekvienam kintamajam atskirai
    set_formatter( 
        "Svorio vidurkis"         = function(x) sprintf("%.3f", x),
        "Standartinis nuokrypis"  = function(x) sprintf("%.3f", x)
    )

# G. Lentelės išsaugojimas į „Word“
dokumento_pavadinimas <-
    read_docx() %>% 
    body_add_flextable(suvestine_issaugojimui) %>% 
    print(target = "dokumentas_su_suvestine.docx")

# H. Dokumento atidarymas programiškai
browseURL(dokumento_pavadinimas)

Sėkmės!

comments powered by Disqus