Sunteți pe pagina 1din 53

Conf. univ. dr.

Nicolae BÂRSAN-PIPU
CUPRINS

1 ELEMENTE DE BAZĂ ÎN R ....................................................................................................... 1


1.1 Ce este R ................................................................................................................................. 1
1.2 Cum se instalează R ................................................................................................................ 1
1.3 Consola R ................................................................................................................................ 1
1.4 Sintaxa de bază în R................................................................................................................ 2
1.5 Variabile .................................................................................................................................. 3
1.6 Vectori..................................................................................................................................... 5
1.7 Indexare și selectare valori din vectori .................................................................................. 6
1.8 Funcții statistice cu vectori .................................................................................................... 8
2 VARIABILE CALITATIVE ........................................................................................................ 10
2.1 Definirea variabilelor calitative ........................................................................................... 10
2.2 Funcția factor() ..................................................................................................................... 10
2.3 Vizualizarea variabilelor calitative ....................................................................................... 12
2.4 Stocarea factorilor în R......................................................................................................... 14
2.5 Schimbarea nivelelor factorilor ........................................................................................... 15
3 VARIABILE CANTITATIVE ..................................................................................................... 17
3.1 Definirea variabilelor cantitative ......................................................................................... 17
3.2 Vizualizarea variabilelor cantitative .................................................................................... 18
3.3 Convertirea datelor cantitative în date calitative ............................................................... 23
3.4 Analiza distribuțiilor continue ............................................................................................. 24
4 DATE BIDIMENSIONALE ...................................................................................................... 27
4.1 Două variabile calitative ...................................................................................................... 27
4.2 Două variabile cantitative .................................................................................................... 32
4.3 Corelația................................................................................................................................ 33
4.4 Regresia ................................................................................................................................ 34
4.5 Variabile calitative și cantitative ......................................................................................... 39
4.6 ANOVA .................................................................................................................................. 40
5 STRUCTURI DE DATE – DATA FRAME ................................................................................... 41
5.1 Tipuri de data frame ............................................................................................................ 41
5.2 Indexarea data frame........................................................................................................... 44
5.3 Atașarea în data frame ........................................................................................................ 45
5.4 Schimbarea în data frame.................................................................................................... 46
6 IMPORTUL DE DATE ............................................................................................................ 48
6.1 Tipuri de import de date ...................................................................................................... 48
6.2 Directorul de lucru................................................................................................................ 48
6.3 Importul fișierelor .csv ......................................................................................................... 48
LABORATORUL 1 – INTRODUCERE ÎN R

1 ELEMENTE DE BAZĂ ÎN R
1.1 Ce este R

▪ R este un limbaj de programare și un mediu pentru calcule statistice și grafică,


dezvoltat pe baza limbajului S.
▪ R oferă o gamă largă de metode statistice (modelare liniară și neliniară, teste
statistice clasice, analiza seriilor de timp, clasificare, grupare, ...) și tehnici
grafice, fiind un mediu software extrem de extensibil.
▪ R este disponibil ca software open-source gratuit.

1.2 Cum se instalează R

▪ R se poate descărca de la adresa:


http://cran.r-project.org/

1.3 Consola R

▪ Consola R este ecranul de lucru pentru comenzile R.

1
LABORATORUL 1 – INTRODUCERE ÎN R

1.4 Sintaxa de bază în R

▪ Sintaxa unei comenzi în R:


(Prompter) comandă # comentariu (Enter)
▪ Rezultatul este precedat de indexul valorii afișate:
[1] rezultat
▪ Reguli de sintaxă:
1. Spațiile nu contează: 2+2 este același cu 2 + 2
2. Operatorii standard sunt: +, –, *, / și ^
3. Ordinea standard a operațiunilor este respectată și poate fi modificată
utilizând paranteze
4. Toate rezultatele sunt precedate de numărul primei valori [1] din linia de
rezultat
5. O expresie precedată de "#" nu este evaluată - "#" este caracterul de
comentariu în R. Orice între un "#" și sfârșitul unei linii este tratat ca un
comentariu și nu este evaluat.
▪ Exemple:

> 2+2 # suma 2+2


[1] 4

> 2 + 2 # suma 2 + 2
[1] 4

> 10 – 5 # diferența 10 – 5
[1] 5

> 4*5 # simbolul pentru înmulțire


[1] 20

> 4/5 # simbolul pentru împărțire


[1] 0.8

2
LABORATORUL 1 – INTRODUCERE ÎN R

> 6^2 # simbolul pentru putere


[1] 36

> (1+2)*3 # expresie cu paranteze


[1] 9

> # acesta este un comentariu

1.5 Variabile

▪ Variabila este un obiect în R, căruia i se pot atribui diferite valori, în funcție


de tipul de date (numerice, caractere, logice etc.).
▪ Sintaxa de atribuire a valorii unei variabile este:
nume_variabilă operator valoare_variabilă
▪ Operatorul de atribuire a valorii variabilei poate fi:
▪ = # operatorul de egalitate
▪ <- # operatorul de atribuire direcționat spre dreapta
▪ -> # operatorul de atribuire direcționat spre stânga
▪ Afișarea valorii variabilei:
> nume_variabilă
[1] valoare_variabilă
▪ Exemple:

> a = 5 # operatorul de egalitate


>a
[1] 5

> a <- 5 # operatorul de atribuire direcționat spre dreapta


>a
[1] 5

> 5 -> a # operatorul de atribuire direcționat spre stânga


>a
[1] 5

3
LABORATORUL 1 – INTRODUCERE ÎN R

> a -> 5 # operatorul de atribuire direcționat spre stânga incorect


Error in 5 <- a : invalid (do_set) left-hand side to assignment

▪ Variabilele pot fi utilizate în expresii:

> a*2
[1] 10

> b = a*2
>b
[1] 10

> b <- a*2


>b
[1] 10

▪ Variabilele create în R sunt memorate în spațiul de lucru (workspace)


▪ Pentru a vizualiza (lista) conținutul spațiului de lucru se utilizează comanda:
ls()
▪ Exemplu: lista variabilelor din spațiul de lucru după crearea variabilelor a și b

> ls() # vizualizare (listare) spațiu de lucru


[1] "a" "b"

▪ Pentru a elimina (remove) o variabilă din conținutul spațiului de lucru se


utilizează comanda:
rm(nume_variabilă)

▪ Exemplu: eliminarea variabilei a din spațiul de lucru:

> rm(a) # eliminarea variabilei a din spațiul de lucru


>a
Error: object 'a' not found

> ls() # vizualizare (listare) spațiu de lucru după eliminarea lui a


[1] "b"

4
LABORATORUL 1 – INTRODUCERE ÎN R

1.6 Vectori

▪ Vectorii sunt obiecte în R, reprezentate de tabele (sau matrice) de valori


unidimensionale (o singură linie).
▪ Sintaxa:
nume_variabilă <- c(v1, v2, …, vn)
▪ Exemplu: Numărul de SMS-uri primite zilnic într-o săptămână:

> sms <- c(0, 1, 2, 0, 0, 0, 1)


> sms
[1] 0 1 2 0 0 0 1

▪ Observații:
▪ c( ) este funcția de concatenare a valorilor într-un vector
▪ Valorile numerice sunt separate prin virgula
▪ Vectorii pot fi utilizați pentru:
▪ Operații matematice
▪ Sortare
▪ Selectare valori
▪ Valorile inițiale ale vectorului rămân nemodificate
▪ Exemple:

> sms + 5 # adăugarea valorii 5 la fiecare element


[1] 5 6 7 5 5 5 6

> sms * 5 # înmulțirea cu 5 a fiecărui element


[1] 0 5 10 0 0 0 5

> sms/2 # împărțirea la 2 a fiecărui element


[1] 0.0 0.5 1.0 0.0 0.0 0.0 0.5

> sort(sms) # sortare crescătoare sms


[1] 0 0 0 0 1 1 2

> sort(sms, decreasing=TRUE) # sortare descrescătoare sms


[1] 2 1 1 0 0 0 0

5
LABORATORUL 1 – INTRODUCERE ÎN R

> sms # valorile inițiale ale sms


[1] 0 1 2 0 0 0 1

> sms.cr <- sort(sms) # crearea vectorului sms.cr cu valorile sortate crescător
ale sms
> sms.cr
[1] 0 0 0 0 1 1 2

1.7 Indexare și selectare valori din vectori

▪ Indexarea și selectarea unor (sub)șiruri de valori din vectori se realizează cu


ajutorul operatorului de selectare [ ] (parantezele drepte)
▪ Exemple de utilizare:

> sms # valorile inițiale ale sms


[1] 0 1 2 0 0 0 1

> sms[3] # selectarea valorii a 3-a din vectorul sms


[1] 2

> sms[2:4] # selectarea valorilor a 2-a până la a 4-a din vectorul sms
[1] 1 2 0

▪ Semnul - în [ ] are semnificația „toate elementele, mai puțin...”


▪ Exemple de utilizare:

> sms[-3] # toate valorile sms mai puțin cea de-a 3-a
[1] 0 1 0 0 0 1

> sms[-(2:3)] # toate valorile sms mai puțin a 2-a până la a 3-a
[1] 0 0 0 0 1

> sms[-c(2, 3, 7)] # toate valorile sms mai puțin valorile a 2-a, a 3-a, a 7-a
[1] 0 0 0 0

6
LABORATORUL 1 – INTRODUCERE ÎN R

▪ Testul logic nume_vector < 0 returnează valorile TRUE sau FALSE pentru
elementele vectorului:

> sms < 0


[1] FALSE TRUE TRUE FALSE FALSE FALSE TRUE

▪ În exemplul următor, selectăm valorile pozitive din vectorul sms:

> sms[sms > 0]


[1] 1 2 1

▪ R tratează valorile logice ca FALSE = 0 și TRUE = 1


▪ Dacă utilizăm funcția de sumare sum() pentru vectorul inițial obținem suma
valorilor vectorului:

> sum(sms)
[1] 4

▪ Dacă facem însă suma pentru testul logic sms > 0, R va suma cele 3 valori
TRUE:

> sum(sms > 0)


[1] 3

▪ Putem folosi, de asemenea, funcția which() pentru extragerea logică, care


furnizează indexul zilelor în care sms > 0:

> which(sms > 0)


[1] 2 3 7

▪ Putem folosi acum funcția mean () pentru a obține numărul mediu de mesaje
SMS în zilele în care s-au primit mesaje:

> sms[which(sms > 0)] # numărul de mesaje din zilele în care sms > 0
[1] 1 2 1

7
LABORATORUL 1 – INTRODUCERE ÎN R

> mean(sms[which(sms > 0)]) # media numărului de mesaje pentru sms > 0
[1] 1.333333

▪ Să remarcăm că putem aplica media direct și pentru selecția valorilor pozitive


menționată mai sus:

> mean(sms[sms > 0])


[1] 1.333333

▪ Se poate utiliza operatorul de indexare pentru a schimba o parte a vectorului:

> sms[1] <- 3 # înlocuire a primei valori din vectorul sms cu valoarea 3
> sms
[1] 3 1 2 0 0 0 1

1.8 Funcții statistice cu vectori

▪ Următoarele funcții statistice pot fi aplicate pentru vectori:


Funcția Descriere
▪ mean () ▪ media
▪ sd () ▪ abaterea standard
▪ median () ▪ mediana
▪ max () ▪ maxim
▪ min () ▪ minim
▪ range() ▪ minim și maxim
▪ length() ▪ numărul de elemente ale unui vector
▪ diff () ▪ diferențele dintre elementele
succesive ale unui vector

▪ Considerăm eșantionul de valori de mai jos în vectorul sample, pentru care


aplicăm funcțiile de mai sus:

> sample <- c(8, -10, -2, 9, -4, -6, 7, 0, 5)


> length(sample) # numărul de elemente
[1] 9

8
LABORATORUL 1 – INTRODUCERE ÎN R

> mean(sample) # media


[1] 0.7777778

> sort(sample) # vectorul ordonat crescător


[1] -10 -6 -4 -2 0 5 7 8 9

> median(sample) # mediana


[1] 0

> sd(sample) # abaterea standard


[1] 6.79665

> min(sample) # minim


[1] -10

> max(sample) # maxim


[1] 9

> range(sample) # minim și maxim


[1] -10 9

> diff(sample) # diferențele dintre elementele succesive


[1] -18 8 11 -13 -2 13 -7 5

9
LABORATORUL 1 – INTRODUCERE ÎN R

2 VARIABILE CALITATIVE
2.1 Definirea variabilelor calitative

▪ Datele cu care lucrăm în R sunt în general stocate ca vectori, iar acești vectori
sunt, de obicei, parte dintr-un structură de date (data frame),
▪ Date calitative (datele de tip categorie sau datele atributive) sunt denumite
factori în R.
▪ Cele mai uzuale tipuri de date pentru vectorii din R sunt:
▪ "logic"
▪ "integer"
▪ "double"
▪ "character"
▪ Există câteva modalități de a afla cum stochează datele R.
▪ Funcția str() ("structura") oferă tipul de date de bază.
▪ Funcția summary() oferă statistici de sumare pentru variabilele numerice,
dar și numărul de niveluri pentru factori.

2.2 Funcția factor()

▪ Datele calitative sau datele de tip categorie sunt stocate în R ca factori.


▪ Putem folosi funcția factor() pentru a converti (constrânge) un vector la tipul
factor
▪ Exemplu: vectorul cols conține mai multe denumiri de culori

> cols <- c("Blue", "Blue", "Red", "Red", "Blue", "Yellow", "Green")
> str(cols) # structura vectorului
chr [1:7] "Blue" "Blue" "Red" "Red" "Blue" "Yellow" "Green"

> summary(cols) # sumarul vectorului


Length Class Mode
7 character character

> cols[2] # a 2-a culoare din vector


[1] "Blue"

10
LABORATORUL 1 – INTRODUCERE ÎN R

▪ Aplicăm funcția factor(cols):

> cols <- factor(cols)


> str(cols)
Factor w/ 4 levels "Blue","Green",..: 1 1 3 3 1 4 2

> summary(cols)
Blue Green Red Yellow
3 1 2 1

▪ Funcția levels() ne arată toate nivelurile pentru un factor:


> levels(cols)
[1] "Blue" "Green" "Red" "Yellow"

▪ Putem folosi funcția table() pentru a vizualiza un tabel de frecvență pentru


factorul nostru

> table(cols)
cols
Blue Green Red Yellow
3 1 2 1

▪ Tabelul de frecvență creat de table() este el însuși un obiect R, ceea ce


înseamnă că îi putem atribui unui alt nume (b în acest exemplu) și putem
accesa părți din acesta:

> b <- table(cols)


> b[3]
Red
2

11
LABORATORUL 1 – INTRODUCERE ÎN R

2.3 Vizualizarea variabilelor calitative

▪ Dacă vrem un rezumat grafic al unui factor, putem vizualiza un grafic cu bare,
cu funcția barplot().
▪ Cu toate acestea, trebuie să folosim table() cu barplot(), deoarece barplot()
necesită valorile pe care le va competa (argumentul înălțimii height) într-o
formă numerică (adică un vector sau o matrice)
▪ Vezi ?barplot pentru mai multe detalii în Help.

> ?barplot
starting httpd help server ... done

▪ Funcția de reprezentare grafică este plot():

> barplot(table(cols))
> plot(cols)

▪ Putem reprezenta grafic vectorul b, completând și argumentele funcției


> barplot(b/length(cols), col = c("blue", "green", "red", "yellow"), ylab =
"Proportion")

12
LABORATORUL 1 – INTRODUCERE ÎN R

▪ Putem reprezenta și un grafic circular (pie chart) cu funcția pie()


> pie(table(cols))

13
LABORATORUL 1 – INTRODUCERE ÎN R

▪ Putem reprezenta grafic vectorul b, completând și argumentele funcției


> pie(b, col = c("blue", "green", "red", "yellow"))

2.4 Stocarea factorilor în R

▪ R stochează factorii ca o listă de nivele și un vector întreg reprezentând


nivelul fiecărui element al factorului
▪ Exemplu: considerăm factorul a, cu valorile 1, 1, 4, 5, care are trei nivele: 1 4
5:

> a <- c(1, 1, 4, 5)


> str(a)
num [1:4] 1 1 4 5

▪ Pentru schimbarea tipului de date, se pot utiliza și funcțiile:


▪ as.factor(): convertește valorile numerice sau caracterele în factori
(date calitative)
▪ as.numeric(): convertește factorii sau caracterele în valori numerice
▪ as.character(): convertește factorii sau valorile numerice în caractere
▪ Exemplu:
> a <- as.factor(a)
> str(a)
Factor w/ 3 levels "1","4","5": 1 1 2 3

14
LABORATORUL 1 – INTRODUCERE ÎN R

> levels(a)
[1] "1" "4" "5"

▪ Un alt exemplu: un vector de caractere

> b <- c("-.1", " 2.7 ", "B")


> str(b)
chr [1:3] "-.1" " 2.7 " "B"

> as.character(b)
[1] "-.1" " 2.7 " "B"

> as.numeric(b)
[1] -0.1 2.7 NA
Warning message:
NAs introduced by coercion

2.5 Schimbarea nivelelor factorilor

▪ Ocazional trebuie să schimbăm nivelele unui factor - fie pentru a restrânge


sau grupa datele, fie pentru a corecta greșelile din date.
▪ În exemplul următor s-a scris "Bleu" în loc de "Blue" și atunci avem 5 nivele:

> cols <- factor(c("Blue", "Blue", "Red", "Red", "Bleu", "Yellow", "Green"))
levels(cols)
[1] "Bleu" "Blue" "Green" "Red" "Yellow"
> str(cols)
Factor w/ 5 levels "Bleu","Blue",..: 2 2 4 4 1 5 3

▪ Pentru corecția "Bleu" în "Blue" redefinim nivelele:

> levels(cols) <- c("Blue", "Blue", "Green", "Red", "Yellow")


> levels(cols)
[1] "Blue" "Green" "Red" "Yellow"

▪ Ocazional, vrem să impunem ordinea noastră pe un factor mai degrabă decât


să acceptăm ordinea implicită (alfanumerică) dată de R.

15
LABORATORUL 1 – INTRODUCERE ÎN R

▪ De exemplu, un factor cu nivelurile "Low", "Medium" și "High" ar fi ordonate


implicit, iar ordineaa "High", "Low", "Medium" nu are sens. Putem folosi
folosirea argumentului de nivele al funcției factor() pentru a seta ordinea așa
cum dorim sa fie.

> x <- factor(c("L", "M", "H"))


>x
[1] L M H
Levels: H L M

> y <- factor(x, levels = c("L", "M", "H"))


>y
[1] L M H
Levels: L M H

▪ În astfel de cazuri, poate fi util să utilizăm un factor ordonat:

> z <- factor(x, levels = c("L", "M", "H"), ordered = TRUE)


>z
[1] L M H
Levels: L < M < H

> str(z)
Ord.factor w/ 3 levels "L"<"M"<"H": 1 2 3

16
LABORATORUL 1 – INTRODUCERE ÎN R

3 VARIABILE CANTITATIVE
3.1 Definirea variabilelor cantitative

▪ Variabilele cantitative sunt variabilele numerice, sau cele de tip interval


▪ Vom exemplifica pe un vector cu valori numerice, pentru care vom calcula
diferite statistici:

> mp3 <- scan(text = "5.3 3.6 5.5 4.7 6.7 4.3 4.3 8.9 5.1 5.8 4.4")
Read 11 items

> mean(mp3) # media aritmetică


[1] 5.327273

> var(mp3) # dispersia / varianța


[1] 2.130182

> sd(mp3) # abaterea standard


[1] 1.459514

> median(mp3) # mediana


[1] 5.1

> summary(mp3) # 6 statistici


Min. 1st Qu. Median Mean 3rd Qu. Max.
3.600 4.350 5.100 5.327 5.650 8.900

> fivenum(mp3) # 5 statistici


[1] 3.60 4.35 5.10 5.65 8.90

> quantile(mp3, c(0.25, 0.5, 0.75)) # 3 cuartile


25% 50% 75%
4.35 5.10 5.65

> quantile(mp3, c(0.18, 0.36, 0.54, 0.72, 0.9)) # 5 cuantile


18% 36% 54% 72% 90%
4.30 4.58 5.18 5.56 6.70

17
LABORATORUL 1 – INTRODUCERE ÎN R

> IQR(mp3) # Inter Quartile Range


[1] 1.3

> (quantile(mp3, c(0.75))- quantile(mp3, c(0.25))) # IQR


75%
1.3

3.2 Vizualizarea variabilelor cantitative

▪ Să considerăm acum datele numerice din exemplul anterior ca fiind un vector


cu date cantitative:

> mp3 <- c(5.3, 3.6, 5.5, 4.7, 6.7, 4.3, 4.3, 8.9, 5.1, 5.8, 4.4)
> mp3
[1] 5.3 3.6 5.5 4.7 6.7 4.3 4.3 8.9 5.1 5.8 4.4

> str(mp3)
num [1:11] 5.3 3.6 5.5 4.7 6.7 4.3 4.3 8.9 5.1 5.8 ...

▪ Vom vizualiza vectorul de date cu ajutorul histogramei cu funcția hist()

> par(mfrow = c(1, 2)) # comanda pentru 2 grafice pe linie


> hist(mp3) # histograma frecvenței absolute
> hist(mp3, prob = TRUE, col = "blue") # histograma frecvenței relative

18
LABORATORUL 1 – INTRODUCERE ÎN R

▪ O altă vizualizare utilă este estimarea densității, care aproximează o funcție


de distribuție a frecvenței relative, cu funcția lines(density()...)

> hist(mp3, probability = TRUE, col = "blue", ylim = c(0, 0.6))


> lines(density(mp3), col = "red")

19
LABORATORUL 1 – INTRODUCERE ÎN R

▪ Boxplot (box and whiskers plot) reprezintă o altă vizualizare utilă a datelor
cantitative care indică "cuartilele" mediane (Q2), inferioare (Q1) și
superioare (Q3), cât și limitele intercuartilice inferioare și superioare. Ele pot
fi, de asemenea, "crestate" („îngustate”) pentru a arăta intervalul de
încredere pentru mediană. Valorile situate dincolo de limitele intercuartilice
sunt posibile valori extreme (outliers)

> par(mfrow = c(1, 2))


> boxplot(mp3)
> boxplot(mp3, notch = TRUE, col = "green")
Warning message:
In bxp(list(stats = c(3.6, 4.35, 5.1, 5.65, 6.7), n = 11, conf = c(4.480695, :
some notches went outside hinges ('box'): maybe set notch=FALSE

▪ Mesajul de atenționare de mai sus ne arată că limita de încredere superioară


pentru mediană (LISM) depășește Q3, așa cum se observă și în figura
următoare.
▪ Se observă de asemenea, că valoarea 8.9 este extremă, fiind situată deasupra
limitei intercuartilice superioare

20
LABORATORUL 1 – INTRODUCERE ÎN R

▪ Putem vizualiza datele folosind funcția plot (), care este o diagramă de
dispersie.
▪ Întrucât plot () necesită argumente atât pentru x cât și pentru y, dar avem
doar valorile lui x, indicii lui x vor fi folosiți pentru x, iar valorile lui x pentru y.

> plot(mp3)

21
LABORATORUL 1 – INTRODUCERE ÎN R

▪ Alte două alte instrumente care sunt uneori utile sunt „stripchart”-ul și
diagrama „ramuri și frunze” (stem and leaf)
▪ "Stripchart"-ul sau diagrama dotplot este un fel de "scatterplot
unidimensional".

> stripchart(mp3)

▪ Diagrama „ramuri și frunze” (stem and leaf) împarte datele în cifre principale
(ramuri – stem) și cifre secundare (frunze – leaf)

> stem(mp3)
The decimal point is at the |
2|6
4 | 33471358
6|7
8|9

22
LABORATORUL 1 – INTRODUCERE ÎN R

3.3 Convertirea datelor cantitative în date calitative

▪ Uneori trebuie să luăm o variabilă cantitativă și să o "simplificăm", reducând-


o la categorii. Funcția cut () („taie”) poate face acest lucru.

> m.r <- cut(mp3, breaks = c(3:9)) # specifică clasele (the breaks)
> m.r
[1] (5,6] (3,4] (5,6] (4,5] (6,7] (4,5] (4,5] (8,9] (5,6] (5,6] (4,5]
Levels: (3,4] (4,5] (5,6] (6,7] (7,8] (8,9]

▪ Funcția table() folosește factorii de clasificare încrucișată pentru a construi o


tabelă de contingență a frecvențelor la fiecare combinație de niveluri de
factori.

> table(m.r)
m.r
(3,4] (4,5] (5,6] (6,7] (7,8] (8,9]
1 4 4 1 0 1

▪ Pentru fiecare clasă atribuim câte o caracteristică

> levels(m.r) <- c("tiny", "small", "medium", "med-large", "large", "huge")


table(m.r)
m.r
tiny small medium med-large large huge
1 4 4 1 0 1

> plot(m.r)

23
LABORATORUL 1 – INTRODUCERE ÎN R

3.4 Analiza distribuțiilor continue

▪ Considerând distribuția statistică notată generic cu x, vom utiliza


următoarele funcții:
▪ dx – funcția de densitate
▪ px – funcția de probabilitate
▪ qx – cuantila distribuției
▪ rx – generarea variabilelor aleatoare x
▪ Distribuția uniformă are următoarele funcții:
▪ dunif(x, min = 0, max = 1, log = FALSE)
▪ punif(q, min = 0, max = 1, lower.tail = TRUE, log.p = FALSE)
▪ qunif(p, min = 0, max = 1, lower.tail = TRUE, log.p = FALSE)
▪ runif(n, min = 0, max = 1)
▪ Generăm 1000 de valori din distribuția uniformă cu min = 1, max = 10
▪ Prima figură reprezintă histograma frecvenței relative a valorilor uniforme, a
doua boxplot pentru valorile generate, a treia testul de uniformitate Q-Q și
ultima figură funcția de distribuție cumulativă empirică.

> par(mfrow = c(2, 2))


> x.unif <- runif(n = 1000, min = 1, max = 10)
> hist(x.unif, prob = TRUE)
> lines(density(x.unif), col = "red")

24
LABORATORUL 1 – INTRODUCERE ÎN R

> boxplot(x.unif, y = x.unif, main = "Boxplot; Uniform")


> qqplot(x.unif, y = x.unif, main = "QQ-plot; Uniform") # Quantile-Quantile
Plots
> abline(a= 0, b = 1, col = "red") # Add Straight Lines to a Plot
> plot(ecdf(x.unif), main = "Empirical Cumulative Distribution Function;
Uniform") # Empirical Cumulative Distribution Function

▪ Distribuția normală are următoarele funcții:


▪ dnorm(x, mean = 0, sd = 1, log = FALSE)
▪ pnorm(q, mean = 0, sd = 1, lower.tail = TRUE, log.p = FALSE)
▪ qnorm(p, mean = 0, sd = 1, lower.tail = TRUE, log.p = FALSE)
▪ rnorm(n, mean = 0, sd = 1)
▪ Generăm 1000 de valori din distribuția normală cu min = 1, max = 10
▪ Prima figură reprezintă histograma frecvenței relative a valorilor normale, a
doua boxplot pentru valorile generate, a treia testul de normalitate Q-Q și
ultima figură funcția de distribuție cumulativă empirică.

25
LABORATORUL 1 – INTRODUCERE ÎN R

> par(mfrow = c(2, 2))


> x.norm <- rnorm(n = 1000, mean = 5.5, sd = 1.5)
> hist(x.norm, prob = TRUE)
> lines(density(x.norm), col = "red")
> boxplot(x.norm, y = x.norm, main = "Boxplot; Normal")
> qqplot(x.norm, y = x.norm, main = "QQ-plot; Normal") # Quantile-Quantile
Plots
> abline(a= 0, b = 1, col = "red") # Add Straight Lines to a Plot
> plot(ecdf(x.norm), main = "Empirical Cumulative Distribution Function;
Normal") # Empirical Cumulative Distribution Function

26
LABORATORUL 1 – INTRODUCERE ÎN R

4 DATE BIDIMENSIONALE
4.1 Două variabile calitative

▪ Ne interesează uneori să vedem cum sunt corelate două variabile calitative


(factori)
▪ Exemplu: Date privind numărul de cilindri (cyl) și tipul transmisiei (am), unde
0 – automată și 1 – manuală pentru 32 de tipuri de mașini

> cyl <- factor(scan(text= "6 6 4 6 8 6 8 4 4 6 6 8 8 8 8 8 8 4 4 4 4 8 8 8 8 4 4 4


8 6 8 4"))
Read 32 items

> am <- factor(scan(text= "1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1


1 1 1 1"))
Read 32 items

> levels(am)<-c("auto","manual")
> table(cyl,am)
am
cyl auto manual
4 3 8
6 4 3
8 12 2

▪ Funcția table() poate fi folosită pentru a oferi și un tabel de frecvență


bidirecțional (tabel de contingență). De asemenea, este mai simplu să
introducem un factor lung ca numere de nivel și să atribuim nivelurile mai
târziu.
▪ Uneori ne interesează să vizualizăm tabelele de contingență de acest fel
exprimate ca proporții prin funcția prop.table().
▪ Argumentul margin = 1 este pentru proporțiile calculate pe linii.

27
LABORATORUL 1 – INTRODUCERE ÎN R

> tab <- table(cyl, am)


> prop.table(tab, margin = 1)
am
cyl auto manual
4 0.2727273 0.7272727
6 0.5714286 0.4285714
8 0.8571429 0.1428571

▪ Pentru margin = 2 avea proporțiile calculate pe coloane.

> prop.table(tab, margin = 2)


am
cyl auto manual
4 0.1578947 0.6153846
6 0.2105263 0.2307692
8 0.6315789 0.1538462

▪ Dacă nu includem argumentul margin, proporțiile sunt calculate pentru


întregul tabel.

> prop.table(tab)
am
cyl auto manual
4 0.09375 0.25000
6 0.12500 0.09375
8 0.37500 0.06250

▪ Funcția signif () controlează numărul de cifre semnificative tipărite

> signif(prop.table(tab), 2)
am
cyl auto manual
4 0.094 0.250
6 0.120 0.094
8 0.380 0.062

28
LABORATORUL 1 – INTRODUCERE ÎN R

▪ Pentru verificarea asocierii dintre variabilele calitative din tabelul de


contingență se poate folosi testul 2 (Chi2), cu funcția chisq.test(), cu ipoteza
nulă că variabilele sunt independente pentru valoarea p < 0,01.

> chisq.test(tab)
Pearson's Chi-squared test
data: tab
X-squared = 8.7407, df = 2, p-value = 0.01265
Warning message:
In chisq.test(tab) : Chi-squared approximation may be incorrect

▪ Avem p-value = 0.01265, deci se poate respinge ipoteza nulă cu un nivel de


semnificație de 0,01, deci avem o corelație între numărul de cilindri și tipul
transmisiei!
▪ Mesajul de avertizare este determinat de faptul că numărul de valori din
tabelul de contingență este relativ mic, respectiv < 5.

▪ Există câteva modalități posibile de vizualizare a acestor date. O opțiune


utilizează un barplot.
▪ Funcția par() este utilizată pentru a seta parametrii grafici - în acest caz
specificăm că fereastra de plotare va fi împărțită în 1 linie și 2 coloane.

> op = par(mfrow = c(1, 2))


> barplot(table(cyl, am))
> barplot(table(am, cyl))

29
LABORATORUL 1 – INTRODUCERE ÎN R

▪ Completând argumente ale funcției barplot(), obținem figurile următoare

> par(mfrow=c(1,2),mar=c(3,3,3,0.5))
> barplot(table(cyl,am), beside=FALSE, legend.text=TRUE,
main="Transmission and cylinders")
> barplot(table(cyl,am),beside=TRUE,legend.text=TRUE,
main="Transmission and cylinders")
> par(op)

▪ Să menționăm argumentele:
▪ legend.text=TRUE pentru afișarea legendei
▪ beside=TRUE are o valoare logică. Dacă FALSE, coloanele de înălțime
sunt reprezentate ca bare suprapuse și dacă TRUE coloanele sunt
reprezentate ca bare juxtapuse (alăturate).
▪ Comanda > par(op) determină revenirea parametrilor grafici la setările
inițiale

30
LABORATORUL 1 – INTRODUCERE ÎN R

▪ O altă opțiune care este mai puțin cunoscută este funcția mosaicplot(), care
arată proporțiile fiecărei combinații de factori.

> mosaicplot(table(cyl, am), color = T, main = "Cylinders vs. transmission",


ylab = "Transmission", xlab = "Cylinders")

31
LABORATORUL 1 – INTRODUCERE ÎN R

4.2 Două variabile cantitative

▪ Ne interesează deseori să căutăm asocierea între două variabile cantitative.


▪ Exemplu, folosindu-ne datele de specialitate, să analizăm asocierea dintre
capacitatea motorului în litri (disp) și puterea furnizată în cai putere (hp).

> disp=scan(text= "2.62 2.62 1.77 4.23 5.90 3.69 5.90 2.40 2.31 2.75 2.75 4.52
4.52 4.52 7.73 7.54 7.21 1.29 1.24 1.17 1.97 5.21 4.98 5.74 6.55 1.29 1.97
1.56 5.75 2.38 4.93 1.98")
Read 32 items

> hp=scan(text= "110 110 93 110 175 105 245 62 95 123 123 180 180 180
205 215 230 66 52 65 97 150 150 245 175 66 91 113 264 175 335 109")
Read 32 items

▪ Pentru analiza datelor să construim mai întâi boxplot, pentru a vizualiza


simetria distribuțiilor și valorile extreme

> op = par(mfrow = c(1, 2))


> boxplot(disp)
> boxplot(hp)
> par(op)

32
LABORATORUL 1 – INTRODUCERE ÎN R

▪ Observăm că ambele distribuții sunt relativ asimetrice, iar datele privind


puterea motorului conțin o posibilă valoare extremă superioară
▪ Vom încerca să identificăm această valoare cu ajutorul tabelului de date
mtcars inclus în R

> data(mtcars) # încarcă tot setul de date


> mtcars[which(mtcars$hp > 250), ]
mpg cyl disp hp drat wt qsec vs am gear carb
Ford Pantera L 15.8 8 351 264 4.22 3.17 14.5 0 1 5 4
Maserati Bora 15.0 8 301 335 3.54 3.57 14.6 0 1 5 8

▪ Să remarcăm că indicatorul de selectare [ ] are formatul [nr_linie,


nr_coloană], respectiv virgulă între argumente
▪ Comanda mtcars$hp ne arată că selectăm numai coloana hp din tabelul de
date mtcars

4.3 Corelația

▪ Să analizăm dacă există o corelație între capacitate și putere. O diagramă de


dispersie (scatter-plot) ne poate vizualiza acest lucru:

> plot(x = disp, y = hp, main = " Scatter plot - disp, hp")

33
LABORATORUL 1 – INTRODUCERE ÎN R

▪ Să calculăm acum coeficientul de corelație cu funcția cor()

> cor(disp, hp) # pearson implicit


[1] 0.7910567

▪ Valoarea de 0.79 ne arată o corelație suficient de mare între capacitatea și


puterea motorului

4.4 Regresia

▪ Adesea, vrem să modelăm o variabilă în funcție de alta. Pentru două variabile


cantitative, metoda este cunoscută sub denumirea de regresie liniară
▪ În exemplul nostru, presupunem că motoarele cu capacități mai mari ar
trebui să fie mai puternice. În R astfel de modele se analizează folosind
funcția lm () (pentru "modelul liniar"):

> model = lm(hp ~ disp)


> model
Call:
lm(formula = hp ~ disp)
Coefficients:
(Intercept) disp
45.69 26.71

▪ Să reprezentăm acum și dreapta de regresie cu funcția abline()

> plot(x = disp, y = hp, pch = 16, cex = 1.3, col = "blue", main = " Regression
plot", xlab = "disp", ylab = "hp")
> abline(lm(hp ~ disp), col = "red")

34
LABORATORUL 1 – INTRODUCERE ÎN R

▪ Modelul de regresie complet îl obținem cu funcția summary(model)

> summary(model)
Call:
lm(formula = hp ~ disp)
Residuals:
Min 1Q Median 3Q Max
-48.682 -28.396 -6.497 13.571 157.620
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 45.695 16.128 2.833 0.00816 **
disp 26.711 3.771 7.083 7.09e-08 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 42.64 on 30 degrees of freedom
Multiple R-squared: 0.6258, Adjusted R-squared: 0.6133
F-statistic: 50.16 on 1 and 30 DF, p-value: 7.093e-08

35
LABORATORUL 1 – INTRODUCERE ÎN R

▪ Analizăm în continuare distribuția valorilor reziduale


> plot(density(model$residuals))

▪ Valorile reziduale au o distribuție aproximativ normală, acceptabilă însă


pentru validarea modelului de regresie
▪ Pentru validarea celorlalte ipoteze ale modelului de regresie utilizăm funcția
de reprezentare grafică plot(model)

> op = par(mfrow = c(2, 2))


> plot(model)

36
LABORATORUL 1 – INTRODUCERE ÎN R

▪ Se observă că valoarea nr. 31 (Maserati Bora) este o valoare extremă. Vom


discarda această valoare și reluăm analiza de regresie

> op = par(mfrow = c(2, 2))


> model2 <- lm(hp[-31] ~ disp[-31])
> summary(model2)
Call:
lm(formula = hp[-31] ~ disp[-31])
Residuals:
Min 1Q Median 3Q Max
-44.704 -21.601 -2.255 16.349 72.767
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 46.146 11.883 3.883 0.000548 ***
disp[-31] 25.232 2.793 9.033 6.29e-10 ***
---

37
LABORATORUL 1 – INTRODUCERE ÎN R

Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 31.41 on 29 degrees of freedom
Multiple R-squared: 0.7378, Adjusted R-squared: 0.7287
F-statistic: 81.6 on 1 and 29 DF, p-value: 6.291e-10

> plot(model2)
> par(op)

▪ Îndepărtarea valorii extreme îmbunătățește într-adevăr modelul –


coeficientul de determinare R2 crește de la 0.6258 la 0.7378, iar valorile
reziduale arată o distribuție mult mai normală (graficul Q-Q este mai liniar).

38
LABORATORUL 1 – INTRODUCERE ÎN R

4.5 Variabile calitative și cantitative

▪ Atunci când avem o variabilă cantitativă și una calitativă, putem utiliza


instrumente similare ca și pentru două variabile cantitative.
▪ Luați în considerare exemplul și datele privind autoturismele - ne așteptăm
la o diferență de putere între mașinile cu transmisii automate și manuale?
> plot(am, hp)

▪ Se pare că mai multe mașini cu transmisii automate sunt în general mai


puternice, deși cele două mașini cele mai puternice au transmisii manuale -
le-am văzut mai devreme.
▪ Putem folosi un test de tip t (Welch Two Sample t-test) cu două eșantioane
pentru a vedea dacă aceste grupuri sunt diferite.

> t.test(hp ~ am)


Welch Two Sample t-test
data: hp by am
t = 1.2662, df = 18.715, p-value = 0.221
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-21.87858 88.71259
sample estimates:
mean in group auto mean in group manual
160.2632 126.8462
39
LABORATORUL 1 – INTRODUCERE ÎN R

4.6 ANOVA

▪ Atunci când avem o variabilă cantitativă Y (variabila dependentă) și una


calitativă X (variabila independentă) putem aplica ANOVA (analiza varianței
sau analiza dispersională) unidimensională cu funcția oneway.test ().
▪ Deoarece R folosește funcția lm() atât pentru regresie, cât și pentru ANOVA,
putem considera ANOVA ca un fel de regresie, unde variabila X este calitativă.

> oneway.test(hp ~ am)


One-way analysis of means (not assuming equal variances)
data: hp and am
F = 1.6032, num df = 1.000, denom df = 18.715, p-value = 0.221

> oneway.test(hp ~ cyl)


One-way analysis of means (not assuming equal variances)
data: hp and cyl
F = 35.381, num df = 2.000, denom df = 16.514, p-value = 1.071e-06

> summary(lm(hp ~ cyl))


Call:
lm(formula = hp ~ cyl)
Residuals:
Min 1Q Median 3Q Max
-59.21 -22.78 -8.25 15.97 125.79
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 82.64 11.43 7.228 5.86e-08 ***
cyl6 39.65 18.33 2.163 0.0389 *
cyl8 126.58 15.28 8.285 3.92e-09 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 37.92 on 29 degrees of freedom
Multiple R-squared: 0.7139, Adjusted R-squared: 0.6941
F-statistic: 36.18 on 2 and 29 DF, p-value: 1.319e-08

40
LABORATORUL 1 – INTRODUCERE ÎN R

5 STRUCTURI DE DATE – DATA FRAME


5.1 Tipuri de data frame

▪ Cele mai multe analize implică importul de date din afara R și efectuarea
diverselor manipulări, teste și vizualizări. Pentru a realiza aceste obiective,
trebuie să înțelegem cum sunt stocate datele în R și cum pot fi accesate.
▪ Să presupunem că avem un mix de date numerice și date de tip caracter.

> a <- list(c(1, 2, 3), "Blue", factor(c("A", "B", "A", "B", "B")))
>a
[[1]]
[1] 1 2 3

[[2]]
[1] "Blue"

[[3]]
[1] A B A B B
Levels: A B

▪ Să notăm că [[ ]] este operatorul de listare. O listă în R poate conține un


număr arbitrar de elemente (care pot fi vectori) și care pot fi de diferite forme
– în exemplul dat avem un date numerice, caractere, și un factor (date
calitative), toate având lungimi diferite.
▪ În R vom lucra cu date stocate ca structură de date (data frame) - aceasta
fiind cea mai comună formă a datelor R.
▪ O structură (frame) de date este un tip special de listă - respectiv o listă de
vectori care au aceeași lungime și ale căror elemente corespund unul cu
celălalt.
▪ Gândiți-vă la ea ca la un mic tabel într-o foaie de calcul, cu coloanele
corespunzătoare fiecărui vector și rândurile pentru fiecare înregistrare.
▪ Există mai multe moduri diferite de a interacționa cu structurile de date din
R. Seturile de date "construite intern" sunt stocate ca I și pot fi încărcate cu
funcția data().
▪ Datele externe pot fi citite în data frame cu funcția read.table()
▪ Datele existente pot fi convertite într-un frame de date utilizând funcția
data.frame()

41
LABORATORUL 1 – INTRODUCERE ÎN R

▪ Considerăm în continuare datele utilizate anterior

> cyl <- factor(scan(text ="6 6 4 6 8 6 8 4 4 6 6 8 8 8 8 8 8 4 4 4 4 8 8 8 8 4 4 4


8 6 8 4"))
Read 32 items

> am <- factor(scan(text = "1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1


1 1 1 1 1"))
Read 32 items

> levels(am) <- c("auto","manual")


> disp <- scan(text = "2.62 2.62 1.77 4.23 5.90 3.69 5.90 2.40 2.31 2.75 2.75
4.52 4.52 4.52 7.73 7.54 7.21 1.29 1.24 1.17 1.97 5.21 4.98 5.74 6.55 1.29
1.97 1.56 5.75 2.38 4.93 1.98")
Read 32 items

> hp <- scan(text = "110 110 93 110 175 105 245 62 95 123 123 180 180 180
205 215 230 66 52 65 97 150 150 245 175 66 91 113 264 175 335 109")
Read 32 items

▪ Asamblăm datele încărcate într-o data frame denumită car

> car <- data.frame(cyl, disp, hp, am)


> head(car) # afișează primele 6 linii din data frame
cyl disp hp am
1 6 2.62 110 manual
2 6 2.62 110 manual
3 4 1.77 93 manual
4 6 4.23 110 auto
5 8 5.90 175 auto
6 6 3.69 105 auto

> summary(car)
cyl disp hp am
4:11 Min. : 1.170 Min. : 52.0 auto :19
6: 7 1st Qu.: 1.978 1st Qu.: 96.5 manual:13
8:14 Median : 3.220 Median :123.0

42
LABORATORUL 1 – INTRODUCERE ÎN R

Mean : 3.781 Mean :146.7


3rd Qu.: 5.343 3rd Qu.:180.0
Max. : 7.730 Max. :335.0

▪ Variabilele din data frame au nume și putem folosi funcția names() pentru a
le regăsi sau modifica.

> names(car)
[1] "cyl" "disp" "hp" "am"

> names(car)[4] <- "trans" # modificare nume "am" în "trans"


> names(car)
[1] "cyl" "disp" "hp" "trans"

> car$am # nu mai apare "am"


NULL

> car$trans
[1] manual manual manual auto auto auto auto auto auto auto
[11] auto auto auto auto auto auto auto manual manual manual
[21] auto auto auto auto auto manual manual manual manual manual
[31] manual manual
Levels: auto manual

▪ Datele din data frame pot fi accesate în mai multe moduri. Putem folosi
operatorul de indexare [ ] pentru a accesa părțile unui data frame prin
rânduri și coloane. De asemenea, putem apela variabile într-un data frame
după nume folosind operatorul $.

> car[1:3, ] # selectare 3 linii și toate coloanele


cyl disp hp trans
1 6 2.62 110 manual
2 6 2.62 110 manual
3 4 1.77 93 manual

43
LABORATORUL 1 – INTRODUCERE ÎN R

> car[ , 3] # selectare toate liniile și coloana a 3-a - hp


[1] 110 110 93 110 175 105 245 62 95 123 123 180 180 180 205 215 230 66 52
[20] 65 97 150 150 245 175 66 91 113 264 175 335 109

> car$hp # selectare toate valorile din coloana denumită hp


[1] 110 110 93 110 175 105 245 62 95 123 123 180 180 180 205 215 230 66 52
[20] 65 97 150 150 245 175 66 91 113 264 175 335 109

▪ Atunci când selectăm în data frame, folosim 2 indici, separați printr-o virgulă.
Lăsarea unei valori necompletate implică "toate rândurile" sau "toate
coloanele", după caz.

▪ În cazul în care am creat un nou data frame în acest fel, este important să
notăm că R a copiat vectorii care alcătuiesc data frame. Deci acum avem hp
și car$hp. Este important să știm acest lucru, deoarece dacă schimbăm unul,
cealalt nu se schimbă.

> hp[1] == car$hp[1]


[1] TRUE

> hp[1] <- 112 # am schimbat prima valoare din hp 110 cu 112
> hp[1] == car$hp[1]
[1] FALSE

▪ Într-un astfel de caz, ar fi o idee bună să eliminăm vectorii pe care i-am folosit
pentru a crea data frame, doar pentru a reduce posibilitatea de confuzie.
Putem face acest lucru folosind funcția rm().

5.2 Indexarea data frame

▪ Deoarece car este un obiect bidimensional, ar trebui să folosim 2 indici.


Utilizarea numărului incorect de indici poate provoca erori sau poate provoca
surprize neplăcute. De exemplu, car[, 4] va returna coloana a 4-a, așa cum va
fi car$am sau car[[4]]. Cu toate acestea, car[4] va returna, de asemenea, a
patra coloană. Dacă ne interesa al patrulea rând (car[4,]) și ați uitat virgula,
aceasta ar putea cauza unele surprize.

44
LABORATORUL 1 – INTRODUCERE ÎN R

> car[[4]]
[1] manual manual manual auto auto auto auto auto auto auto
[11] auto auto auto auto auto auto auto manual manual manual
[21] auto auto auto auto auto manual manual manual manual manual
[31] manual manual
Levels: auto manual

> car$am
[1] manual manual manual auto auto auto auto auto auto auto
[11] auto auto auto auto auto auto auto manual manual manual
[21] auto auto auto auto auto manual manual manual manual manual
[31] manual manual
Levels: auto manual

> car[4]
am
1 manual
2 manual
...
32 manual

> car[4,]
cyl disp hp am
4 6 4.23 110 auto

5.3 Atașarea în data frame

▪ R folosește funcția attach() pentru a atașa datele pentru căutare în R. Aceasta


ne permite să apelăm variabilele după nume. Dacă folosim attach(car),
tastând hp ne afișează datele, iar mean(hp) va funcționa.

> attach(car)
> hp
[1] 110 110 93 110 175 105 245 62 95 123 123 180 180 180 205 215 230
66 52
[20] 65 97 150 150 245 175 66 91 113 264 175 335 109
> mean(hp)
[1] 146.6875
45
LABORATORUL 1 – INTRODUCERE ÎN R

5.4 Schimbarea în data frame

▪ Este destul de simplu să ștergem rânduri sau coloane indexând – de exemplu,


car <- car [-31,] va elimina rândul 31 al datelor și va atribui datele numelui
anterior. În mod similar, car[, -4] va elimina coloana a 4-a (deși datele
schimbate nu au fost atribuite).

> car <- car [-31,]


> car
cyl disp hp am
1 6 2.62 110 manual
2 6 2.62 110 manual
...
30 6 2.38 175 manual
32 4 1.98 109 manual

> car[, -4]


cyl disp hp
1 6 2.62 110
2 6 2.62 110
...
30 6 2.38 175
32 4 1.98 109

▪ Putem să combinăm două data frame împreună. Putem realiza acest lucru
folosind cbind() și rbind() (pentru legarea în coloană și, respectiv, pe rând).
Setul de date mtcars conține mai multe variabile care nu sunt în data frame-
ul car. Vom folosi cbind() pentru a combina cele două seturi de date.

> data(mtcars) # încărcare date


> names(mtcars) # coloanele 1,5:8,10:11 nu sunt în car
[1] "mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear"
[11] "carb"

> dim(car)
[1] 31 4

46
LABORATORUL 1 – INTRODUCERE ÎN R

> car <- cbind(car, mtcars[-31, c(1, 5:8, 10:11)])


> dim(car)
[1] 31 11

> head(car)
cyl disp hp am mpg drat wt qsec vs gear carb
1 6 2.62 110 manual 21.0 3.90 2.620 16.46 0 4 4
2 6 2.62 110 manual 21.0 3.90 2.875 17.02 0 4 4
3 4 1.77 93 manual 22.8 3.85 2.320 18.61 1 4 1
4 6 4.23 110 auto 21.4 3.08 3.215 19.44 1 3 1
5 8 5.90 175 auto 18.7 3.15 3.440 17.02 0 3 2
6 6 3.69 105 auto 18.1 2.76 3.460 20.22 1 3 1

47
LABORATORUL 1 – INTRODUCERE ÎN R

6 IMPORTUL DE DATE
6.1 Tipuri de import de date

▪ Cea mai obișnuită metodă de a importa date în R este folosirea funcției


read.table() sau a uneia dintre derivatele acesteia read.delim() și read.csv ()
▪ R citește trei tipuri de fișiere de date:
▪ valori separate prin virgulă - comma separated values (.csv)
▪ text delimitat cu tab - tab delimited text (.txt)
▪ text delimitat cu spațiu - space delimited text (.txt).

6.2 Directorul de lucru

▪ R va căuta (sau crea) fișiere după nume în directorul de lucru, care este
folderul pe care alegeți să-l utilizați R.
▪ Utilizăm funcția getwd() pentru a vedea ce este directorul de lucru.
▪ Pentru a schimba directorul de lucru utilizăm funcția setwd("file/path/here")

> setwd("C:/Users/Tata/Desktop/DateR")
> getwd()
[1] "C:/Users/Tata/Desktop/DateR"

6.3 Importul fișierelor .csv

▪ Vom importa fișierul W101-2010.csv


▪ Cu funcția read.csv():

> my.data<-read.csv("C:/Users/Tata/Desktop/DateR/W101-2010.csv" ,
comm="#")

> names(my.data)
[1] "Time" "Place" "Bib" "Name" "Sponsor" "Category"
[7] "Cat.Place"

> dim(my.data)
[1] 270 7

48
LABORATORUL 1 – INTRODUCERE ÎN R

> summary(my.data)
Time Place Bib Name
8:28:50 : 2 Min. : 1.00 Min. : 1.00 Aaron.Hofelt : 1
10:00:22: 1 1st Qu.: 68.25 1st Qu.: 83.25 Adam.Naish : 1
10:01:41: 1 Median :135.50 Median :175.50 Allen.Runkle : 1
10:01:55: 1 Mean :135.50 Mean :170.34 Andrew.Carney : 1
10:02:38: 1 3rd Qu.:202.75 3rd Qu.:254.75 Andrew.Christman: 1
10:05:25: 1 Max. :270.00 Max. :333.00 Andrew.Freye : 1
(Other) :263 (Other) :264
Sponsor Category Cat.Place
- : 24 ClydeMen : 15 Min. : 1.00
Freeze.Thaw.Cycles: 9 MasterMen: 14 1st Qu.: 14.00
None : 4 OpenMen :182 Median : 47.50
Self : 4 OpenWomen: 16 Mean : 66.52
Bike.Line : 3 SSMen : 43 3rd Qu.:114.75
bikebarnracing.com: 3 Max. :182.00
(Other) :223

> str(my.data)
'data.frame': 270 obs. of 7 variables:
$ Time : Factor w/ 269 levels "10:00:22","10:01:41",..: 122 123 124 125
126 127 128 129 130 131 ...
$ Place : int 1 2 3 4 5 6 7 8 9 10 ...
$ Bib : int 1 2 322 321 5 6 264 7 71 313 ...
$ Name : Factor w/ 270 levels "Aaron.Hofelt",..: 121 41 203 126 19 43 136
225 201 266 ...
$ Sponsor : Factor w/ 194 levels "-","38.Special",..: 179 168 74 39 119 67 27
120 117 175 ...
$ Category : Factor w/ 5 levels "ClydeMen","MasterMen",..: 3 3 3 3 3 3 3 3 3
3 ...
$ Cat.Place: int 1 2 3 4 5 6 7 8 9 10 ...

49
LABORATORUL 1 – INTRODUCERE ÎN R

▪ Cu funcția read.table():

> my.data <- read.table("C:/Users/Tata/Desktop/DateR/W101-


2010.csv",comm="#",header=TRUE,sep=",")
> my.data
Time Place Bib Name
1 6:34:37 1 1 Jeff.Schalk
2 6:39:41 2 2 Christian.Tanguy
3 6:52:45 3 322 Nick.Waite
...
268 14:35:36 268 329 Taresa.Spitler
269 15:01:21 269 210 Anthony.Cottone
270 15:03:10 270 156 Roberto.Galindo

Sponsor Category Cat.Place


1 Trek.Mountain.Co-Op OpenMen 1
2 eamcf.org OpenMen 2
3 GT/Kenda/ProTested OpenMen 3
...
268 Me OpenWomen 16
269 Tony.No.Bologna OpenMen 182
270 Team.Galindo! ClydeMen 15

50

S-ar putea să vă placă și