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:

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!