Modulo III - Introduzione ad R

annuncio pubblicitario
Modulo III - Introduzione ad R
Elisabetta Ronchieri
Università di Ferrara
Dipartimento di Economia e Management
e-mail: [email protected]
7 Novembre 2016
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
1 / 55
Contenuti
1
Vettori
2
Array e Matrici
Matrici
Array
3
Fattori
4
Lista
5
Data Frame
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
2 / 55
Strutture dati
Nei linguaggi di programmazione ad alto livello non si ha accesso diretto
alla memoria fisica, ma ad una sua astrazione tramite una struttura dati.
R fornisce le seguenti strutture dati:
Vettori
Array e matrici
Fattori
Liste
Data frame
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
3 / 55
Vettori
I vettori rappresentano sequenze ordinate di elementi omogenei.
Un vettore v è rappresentabile tramite una struttura unidimensionale.
v
4 5 1 3 6
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
4 / 55
Creazione di vettori
La funzione c() permette di concatenare gli elementi di un vettore.
Vettore di interi
> c (1 ,2 ,3)
[1] 1 2 3
Vettore di caratteri
> c ( ”A” , ”B” , ”C” )
[ 1 ] ”A” ”B” ”C”
Vettore di stringhe
> c (” euro ” , ” d o l l a b o r ” , ” franco s v i z z e r o ” )
[ 1 ] ” euro ”
” dollabor ”
” franco svizzero ”
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
5 / 55
Variabili ed assegnamenti
Un vettore può essere assegnato ad una variabile.
Assegnare un vettore alla variabile v1
> v1<−c ( 1 , 2 , 3 )
> v1
[1] 1 2 3
Assegnare un nuovo valore alla variabile v1, cancellando il contenuto
precedente
> v1<−c ( 4 , 5 )
> v1
[1] 4 5
Assegnare un vettore di un elemento ad una variabile v2
> v2<−1
> v2
[1] 1
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
6 / 55
Tipi elementari di vettori
I vettori sono sequenze ordinate i cui elementi possono essere di 3 tipi base:
1
Numerici: numeri interi o con la virgola (codificata con il .);
2
Caratteri: singoli caratteri o stringhe (sequenze) di caratteri;
3
Logici: TRUE (T) o FALSE (F)
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
7 / 55
Operazioni aritmetiche tra vettori
Le operazioni aritmetiche vengono eseguite sui vettori elemento per
elemento.
Addizione e sottrazione.
> v1 <−
> v2 <−
> v3 <−
> v3
[1] 5 7
> v4 <−
> v4
[1] 3 3
c (1 , 2 , 3)
c (4 , 5 , 6)
v1 + v2
9
v2 − v1
Moltiplicazione e divisione.
> v1 <− c ( 1 , 2 , 3 )
> v2 <− c ( 4 , 5 , 6 )
> v3 <− v1 ∗ v2
> v3
[ 1 ] 4 10 18
> v4 <− v2 / v1
> v4
[ 1 ] 4.0 2.5 2.5
3
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
8 / 55
Regola del riciclo
Se si sommano due vettori di diversa lunghezza in R, il vettore più corto
viene ripetuto tante volte fino a raggiungere la lunghezza del vettore di
maggior lunghezza.
La regola vale anche per altre strutture dati e per altre operazioni.
> v1 <− c ( 1 , 2 )
> v1
[1] 1 2
> v2 <− c ( v1 , v1 )
> v2
[1] 1 2 1 2
> v3 <− c ( 3 , 4 , 5 , 6 )
> v2 ∗ v3
[1]
3 8 5 12
> # i l v e t t o r e v1 v i e n e r i p e t u t o due
> # volte ( regola del r i c i c l o )
> v1 ∗ v2
[1] 1 4 1 4
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
9 / 55
Funzioni applicate a vettori numerici
Di seguito alcune funzioni applicate ai vettori.
> v1 <− c ( 1 , 2 , 3 )
> mean ( v1 )
[1] 2
> max ( v1 )
[1] 3
> min ( v1 )
[1] 1
> r a n g e ( v1 )
[1] 1 3
> sum ( v1 )
[1] 6
> p r o d ( v1 )
[1] 6
Elisabetta Ronchieri
> v2<−c ( 1 , 2 , 2 , 4 , 5 )
> u n i q u e ( v2 )
[1] 1 2 4 5
> # p o s i z o i n e d i 2 i n v2
> which ( v2==2)
[1] 2 3
> u n i o n ( v1 , v2 )
[1] 1 2 3 4 5
> i n t e r s e c t ( v1 , v2 )
[1] 1 2
> s e t d i f f ( v1 , v2 )
[1] 3
> i s . e l e m e n t ( 7 , v2 )
[ 1 ] FALSE
> v3<−c ( 2 , 1 , 4 , 3 )
> v4<−s o r t ( v3 )
> # ordinamento c r e s c e n t e
> s o r t ( v3 )
[1] 1 2 3 4
> # posizione degli i n d i c i del vettore
> # o r d i n a t o i n modo c r e s c e n t e
> o r d e r ( v3 )
[1] 2 1 4 3
Modulo III.1 - Strutture Dati
7 Novembre 2016
10 / 55
Generazioni di sequenze di numeri
Di seguito alcune funzioni che permettono di generare sequenze di numeri.
Funzione c()
> c (1:10)
[1]
1 2 3
> c (5:1)
[1] 5 4 3 2 1
4
5
6
7
8
9 10
Funzione seq() che può avere 5 argomenti
> seq ( 1 , 1 0 )
[1]
1 2 3 4 5 6 7 8 9 10
> s e q ( from =1 , t o =4 , by =0.5)
[ 1 ] 1.0 1.5 2.0 2.5 3.0 3.5 4.0
Funzione rep()
> r e p ( c ( 1 , 2 ) , t i m e s =4)
[1] 1 2 1 2 1 2 1 2
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
11 / 55
Operazioni logiche su vettori
I vettori possono assumere valori logici.
Gli opeatori logici: <, <=, <, >, ==, ! =
> v <− 3 : 8
> v > 5
[ 1 ] FALSE FALSE FALSE TRUE TRUE TRUE
> v <= 5
[ 1 ] TRUE TRUE TRUE FALSE FALSE FALSE
> # o p e r a t o r e u g u a g l i a n z a ==
> v == 5
[ 1 ] FALSE FALSE TRUE FALSE FALSE FALSE
> # o p e r a t o r e d i s e g u a g l i a n z a !=
> v != 5
[ 1 ] TRUE TRUE FALSE TRUE TRUE TRUE
Elisabetta Ronchieri
>
> v [ v >5]
[1] 6 7 8
> v [ v<=5]
[1] 3 4 5
>
> v [ v==5]
[1] 5
>
> v [ v !=5 ]
[1] 3 4 6 7 8
Modulo III.1 - Strutture Dati
7 Novembre 2016
12 / 55
Dati mancanti
Alcuni elementi di un vettore possono essere non noti o disponibili.
NA o Not Available è il valore speciale che viene attribuito a tale elemento
da R.
Qualunque operazione che coinvolga valori NA ha come risultato NA.
> v<−c ( 1 : 4 , NA)
> v
[ 1 ] 1 2 3 4 NA
> v + 2
[ 1 ] 3 4 5 6 NA
NA non è un valore ma un marcatore di una quantità non disponibile. Per
individuare quali elementi siano effettivamente NA in un vettore si deve
usare la funzione is.na():
> i s . na ( v )
[ 1 ] FALSE FALSE FALSE FALSE
Elisabetta Ronchieri
TRUE
Modulo III.1 - Strutture Dati
7 Novembre 2016
13 / 55
Selezione e accesso a sottoinsiemi di elementi di un vettore
Esistono diverse modalità di accesso a singoli elementi o a sottoinsiemi di
elementi di un vettore.
La selezione e l’accesso avviene tramite l’ operatore [] (parentesi quadre).
Sottoinsiemi di elementi di un vettore sono selezionati collegando al nome
del vettore un vettore di indici in parentesi quadre.
Esistono 4 diverse modalità di selezione/accesso:
vettori di indici interi positivi
vettore di indici interi negativi
vettore di indici logici
vettori di indici a caratteri
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
14 / 55
Selezione e accesso a sottoinsiemi di elementi di un vettore
Gli elementi di un vettore v1 sono selezionati tramite un vettore v2 di
indici positivi racchiuso fra parentesi quadre: v1[v2].
> v1 <− 1 : 5
> v1 [ 1 ] # s e l e z i o n e d i un s i n g o l o e l e m e n t o
[1] 1
> v1 [ 5 ]
[1] 5
> l e n g t h ( v1 ) # l u n g h e z z a d e l v e t t o r e
[1] 5
> v1 [ 7 ] # a c c e s s o ad un e l e m e n t o f u o r i r a n g e
[ 1 ] NA
> v1 [ 2 : 4 ]
[1] 2 3 4
> v1 [ c ( 1 , 3 , 5 ) ]
[1] 1 2 5
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
15 / 55
Selezione e accesso a sottoinsiemi di elementi di un vettore
Gli elementi di un vettore v1 che devono essere esclusi sono selezionati
tramite un vettore v2 di indici negativi racchiuso fra parentesi quadre:
v1[v2].
> v1 <− r e p ( c ( ”A” , ”B” , ”C” ) , t i m e s =3)
> v1
[ 1 ] ”A” ”B” ”C” ”A” ”B” ”C” ”A” ”B” ”C”
> v2 <− v1 [ − ( 1 : 5 ) ] # s e l e z i o n a t i t u t t i g l i e l e m e n t i d i v1 e c c e t t o i p r i m i 5
> v2
[ 1 ] ”C” ”A” ”B” ”C”
> v2 <− v2[− l e n g t h ( v2 ) ] # c a n c e l l a z i o n e d e l l ’ u l t i m o e l e m e n t o d i v2
> v2
[ 1 ] ”C” ”A” ”B”
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
16 / 55
Selezione e accesso a sottoinsiemi di elementi di un vettore
Gli elementi di un vettore v1 sono selezionati tramite un vettore v2 di
indici logici.
Il vettore indice deve essere della stessa lunghezza del vettore i cui
elementi devono essere selezionati.
Sono selezionati gli elementi corrispondenti a TRUE nel vettore degli indici
ed omessi quelli corrispondenti a FALSE.
> v1 <− c ( 1 : 5 , NA, NA)
> v1
[1]
1 2 3 4 5 NA NA
> v2 <− c ( r e p (TRUE, t i m e s =3) , r e p ( FALSE , t i m e s =4))
> v2 # v2
i l vettore indice logico
[ 1 ] TRUE TRUE TRUE FALSE FALSE FALSE FALSE
> v1 [ v2 ] # s e l e z .
elementi tramite vett . indice logico
[1] 1 2 3
> v1 [ ! i s . na ( v1 ) ] # s e l e z i o n e e l e m e n t i c h e non s o n o NA
[1] 1 2 3 4 5
> v1 [ ! i s . na ( v1 ) & v1 > 2 ]
[1] 3 4 5
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
17 / 55
Selezione e accesso a sottoinsiemi di elementi di un vettore
Gli elementi di un vettore v1 sono selezionati tramite un vettore v2 di
indici a caratteri.
È applicabile quando un vettore possiede un attributo names per
identificare le sue componenti.
> c a m p i o n e <− c ( 4 5 , 2 0 0 0 , 5 0 0 )
> names ( c a m p i o n e ) <− c ( ” Eta ” , ” S t i p e n d i o ” , ” T a s s e ” )
> campione
Eta S t i p e n d i o T a s s e
45.00
2000
500
> Eta . S t i p e n d i o <− c a m p i o n e [ c ( ” Eta ” , ” S t i p e n d i o ” ) ]
> Eta . S t i p e n d i o
Eta S t i p e n d i o
45
2000
> Eta . T a s s e <− c a m p i o n e [ c ( ” Eta ” , ” T a s s e ” ) ]
> Eta . T a s s e
Eta T a s s e
45
500
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
18 / 55
Esercizi
1
2
Generare un vettore v contenente i primi 10 interi positivi.
Costruire una sequenza s costituita da 3 ripetizioni in sequenza dei
caratteri ”A”, ”B” e ”C”.
Estrarre dalla sequenza ottenuta una sotto sequenza ss in cui
compaiano tutti gli elementi di s eccetto il carattere C;
Aggiungere in coda alla sequenza ottenuta 3 valori NA;
Riottenere la sequenza ss tramite la funzione is.na().
3
Cosa accade se si prova a costruire un vettore eterogeneo di numeri e
caratteri ?
4
Cosa accade se si prova a costruire un vettore eterogeneo di numeri e
di valori logici ?
5
Generare un vettore v di 10 numeri che vanno da -2 a 7 e selezionare
solo quelli positivi.
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
19 / 55
Array e Matrici
Le matrici sono estensioni bidimensionali di vettori.
1 4 7
2 5 8
3 6 9
Per accedere o modificare un elemento della matrice è necessaria una
coppia di indici.
Detta m la matrice di sopra, per selezionare l’elemento nella riga 1 e
colonna 2:
> m[ 1 , 2 ]
[1] 4
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
20 / 55
Array e Matrici
Gli array sono estensioni multidimensionali di vettori.
Per accedere o modificare un elemento di un array tridimensionale sono
necessari 3 indici.
Gli array possono avere dimensione arbitraria limitatamente alla
dimensione della memoria.
Le matrici sono array bidimensionali.
Sugli array sono applicabili le medesime operazioni di accesso e modifica
viste per i vettori ma estese a più dimensioni.
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
21 / 55
Matrici
Le matrici sono array bidimensionali.
1 4 7
2 5 8
3 6 9
Gli elementi di una matrice sono selezionati tramite una coppia di indici
racchiusi fra parentesi quadre.
Detta m la matrice di sopra:
per selezionare l’elemento nella riga 1 e colonna 2:
> m[ 1 , 2 ]
[1] 4
per selezionare l’elemento nella riga 3 e colonna 3:
> m[ 3 , 3 ]
[1] 9
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
22 / 55
Costruzione di matrici
La funzione matrix() permette di creare una matrice m a partire da un
vettore esistente v, assegnando i valori per colonna.
> v <− 1 : 1 2
> m <− m a t r i x ( v , nrow =3)
> m
[ ,1] [ ,2] [ ,3] [ ,4]
[1 ,]
1
4
7
10
[2 ,]
2
5
8
11
[3 ,]
3
6
9
12
La funzione length() restituisce il numero degli elementi nella matrice.
> l e n g t h (m)
[ 1 ] 12
La funzione mode() visualizza il tipo dei dati.
> mode (m)
[ 1 ] ” numeric ”
La funzione dim() restituisce le dimensioni della matrice, riportando prima
il numero di righe e poi quello delle colonne.
> dim (m)
[1] 3 4
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
23 / 55
Costruzione di matrici
La funzione matrix() possiede diversi parametri.
> v <− 1 : 1 2
> m <− m a t r i x ( v ,
> m
[ ,1] [ ,2] [
[1 ,]
1
5
[2 ,]
2
6
[3 ,]
3
7
[4 ,]
4
8
n c o l =3)
,3]
9
10
11
12
L’argomengo byrow=T permette di inserire gli elementi per riga.
> m <− m a t r i x ( 1 : 1 2 , n c o l =3 , byrow=T)
> m
[ ,1] [ ,2] [ ,3]
[1 ,]
1
2
3
[2 ,]
4
5
6
[3 ,]
7
8
9
[4 ,]
10
11
12
Verificare come risulta la matrice m se si mette ncol=5. Vale ancora la
regola del riciclo.
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
24 / 55
Costruzione di matrici
La funzione cbind() forma matrici legando insieme vettori o matrici per
colonna.
v1 <− 1 : 3
v2 <− 4 : 6
m <− c b i n d ( v1 , v2 )
m
v1 v2
[1 ,]
1 4
[2 ,]
2 5
[3 ,]
3 6
>
>
>
>
Verificare come risulta la matrice m se si mettono vettori di lunghezza
diversa. Vale ancora la regola del riciclo.
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
25 / 55
Costruzione di matrici
La funzione rbind() forma matrici legando insieme vettori o matrici per
riga.
v1 <− 1 : 3
v2 <− 4 : 6
m <− r b i n d ( v1 , v2 )
m
[ ,1] [ ,2] [ ,3]
v1
1
2
3
v2
4
5
6
>
>
>
>
Verificare come risulta la matrice m se si mettono vettori di lunghezza
diversa. Vale ancora la regola del riciclo.
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
26 / 55
Operazioni aritmetiche con matrici
Somma e prodotto con
costanti.
> v<−1 : 4
> M<−m a t r i x ( v , nrow =2)
>M
[ ,1] [ ,2]
[1 ,]
1
3
[2 ,]
2
4
> M+2
[ ,1] [ ,2]
[1 ,]
3
5
[2 ,]
4
6
> M∗2
[ ,1] [ ,2]
[1 ,]
2
6
[2 ,]
4
8
Elisabetta Ronchieri
Somma e prodotto tra matrici
elemento per elemento.
> M+M
[1 ,]
[2 ,]
> M∗M
[1 ,]
[2 ,]
[ ,1] [ ,2]
2
6
4
8
[ ,1] [ ,2]
1
9
4
16
Modulo III.1 - Strutture Dati
7 Novembre 2016
27 / 55
Accesso agli elementi di un array e matrice
Le regole di accesso per array e matrici seguono quelle viste per i vettori,
considerando l’esistenza di più indici e quindi la possibilità di utilizzare un
vettore per ogni dimensione:
Vettori di indici interi positivi;
Vettore di indici interi negativi;
Vettore di indici logici;
Vettori di indici a caratteri.
Si utilizza un vettore di indici per ogni dimensione dell’array.
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
28 / 55
Accesso agli elementi di una matrice
> m <− m a t r i x ( 1 : 1 2 , nrow =2)
> m
[ ,1] [ ,2] [ ,3] [ ,4] [ ,5] [ ,6]
[1 ,]
1
3
5
7
9
11
[2 ,]
2
4
6
8
10
12
> # e l . r i g a 1 , colonna 2
> m[ 1 , 2 ]
[1] 3
> # e l . riga 1 , colonne 3 e 4
> m [1 ,3:4]
[1] 5 7
> # righe 1 e 2 , colonne 4 , 5 e 6
> m [1:2 ,4:6]
[ ,1] [ ,2] [ ,3]
[1 ,]
7
9
11
[2 ,]
8
10
12
> # tutti gli el . della riga 1
> m[ 1 , ]
[1]
1 3 5 7 9 11
> # t u t t i g l i e l . colonna 3
> m[ , 3 ]
[1] 5 6
> # t u t t i g l i e l . colonne 1 , 2 e 6
> m[ , c ( 1 , 2 , 6 ) ]
[ ,1] [ ,2] [ ,3]
[1 ,]
1
3
11
[2 ,]
2
4
12
Elisabetta Ronchieri
> # e s c l u s i o n e colonna 4
> m[ , −4]
[ ,1] [ ,2] [ ,3] [ ,4] [ ,5]
[1 ,]
1
3
5
9
11
[2 ,]
2
4
6
10
12
> # el . > 4
> m[m>4]
[1]
5 6 7 8 9 10 11 12
> # a s s e g n a z i o n e d i un nome a l l e c o m p o n e n t i
> dimnames (m)< l i s t ( c ( ” r i g a 1 ” , ” r i g a 2 ” ) ,
+ p a s t e ( ” c ” , 1 : 6 , s e p=” ” ) )
> m
c1 c2 c3 c4 c5 c6
r i g a 1 1 3 5 7 9 11
r i g a 2 2 4 6 8 10 12
> # vettori indice a caratteri
> m[ ” r i g a 1 ” , ” c2 ” ]
[1] 3
> m[ ” r i g a 1 ” , ]
c1 c2 c3 c4 c5 c6
1 3 5 7 9 11
Modulo III.1 - Strutture Dati
7 Novembre 2016
29 / 55
Creazione di array
La funzione array() permette di creare degli array.
>
>
>
>
>
>
# 1 parametro co nt ie ne g l i elementi
# 2 parametro l e dimensioni :
# 4 numero d i r i g h e , 2 numero d i c o l o n n e , 3 numero d i m a t r i c i
a <− a r r a y ( 2 4 : 4 9 , dim=c ( 4 , 2 , 3 ) )
# 1 matrice
a [ , ,1]
[ ,1] [ ,2]
[1 ,]
24
28
[2 ,]
25
29
[3 ,]
26
30
[4 ,]
27
31
> # 2 r i g a per tutte l e matrice per colonna
> a [2 , ,]
[ ,1] [ ,2] [ ,3]
[1 ,]
25
33
41
[2 ,]
29
37
45
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
30 / 55
Esercizi
1
Costruire una matrice m1 5X5 composta da numeri casuali in almeno
2 modi diversi utilizzando le funzioni matrix() ed array().
2
Costruire 2 matrici di caratteri a piacere m2 e m3, la prima di
dimensione 3X3, la seconda di dimensione 2X3. Modificare con un
unico assegnamento la matrice m2 in modo da sostituire le sue 2
prime colonne con le ultime 2 righe di m3.
3
Costruire due matrici m4 e m5 che abbiano entrambe 3 colonne.
Costruire, se possibile, tramite rbind() una matrice m6 di 3 colonne
che abbia come righe le righe di entrambe le matrici. Utilizzando m4
e m5, è possibile costruire una matrice m7 tramite cbind()?
4
Costruire una matrice m di 5 colonne con la sequenza di numeri da 1
a 11.5 con passo 0.5 inseriri per riga. Sommare ai valori nella terza
riga il numero 1.
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
31 / 55
Fattori
I fattori sono strutture dati per indicare variabili di tipo vettore nominato
in grado di rappresentare informazioni di tipo categorico o qualitativo.
I diversi valori sono collocati all’interno di livelli, usati per raggruppare i
dati.
I livelli possono essere rappresentati da sigle (come ”A” o ”B”) o da
stringhe (come ”Alto” o ”Basso”) o da codici numerici.
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
32 / 55
Fattori
Supponiamo di avere dati sulle Università italiane. Di seguito ne sono
riportate alcune.
Nome
UniFer
UniBo
Bocconi
Categoria
Pubblica
Pubblica
Privata
I dati contengono due variabili: il nome della Università e la categoria.
Il nome è un dato univoco che caratterizza ogni singola Università
(non si usa come criterio di raggruppamento).
La categoria, al contrario, è una variabile che può assumere solo due
valori (Pubblica o Privata) e consente di suddividere le Università in
due gruppi.
Le variabili nome e categoria sono caratteri, ma solo la variabile categoria
può essere un fattore.
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
33 / 55
Costruzione di fattori
La funzione factor() permette di creare un fattore.
> f <− f a c t o r ( r e p ( c ( ” e u r o ” , ” d o l l a r o ” ) , c ( 3 , 4 ) ) )
> f
[ 1 ] euro
euro
euro
dollaro dollaro dollaro
Levels : d o l l a r o euro
> # dollaro \‘e nella posizione 1
> # euro \ ‘ e n e l l a p o s i z i o n e 2
dollaro
La funzione level() visualizza solo i livelli del fattore.
> levels ( f )
[ 1 ] ” d o l l a r o ” ” euro ”
La funzione str() visualizza in modo succinto la struttura dati di un
oggetto.
> str ( f )
F a c t o r w/ 2 l e v e l s ” d o l l a r o ” , ” e u r o ” : 2 2 2 1 1 1 1
La funzione summary() fornisce una tabella della frequenze dei due livelli
euro e dollaro.
> summary ( f )
dollaro
euro
4
3
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
34 / 55
Operazioni logiche sui fattori
Partendo dal fattore f.
> f <− f a c t o r ( r e p ( c ( ” e u r o ” , ” d o l l a r o ” ) , c ( 3 , 4 ) ) )
> f
[ 1 ] euro
euro
euro
dollaro dollaro dollaro
Levels : d o l l a r o euro
dollaro
Le operazioni logiche possono essere applicate per estrarre informazioni
legate ai livelli.
> f [ f==” e u r o ” ]
[ 1 ] euro euro euro
Levels : d o l l a r o euro
> f [ f !=” e u r o ” ]
[1] dollaro dollaro dollaro dollaro
Levels : d o l l a r o euro
> f [ f>” e u r o ” ]
[ 1 ] <NA> <NA> <NA> <NA> <NA> <NA> <NA>
Levels : d o l l a r o euro
Warning m e s s a g e :
I n Ops . f a c t o r ( f , ” e u r o ” ) :
>
not meaningful f o r f a c t o r s
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
35 / 55
Esercizi
1
Costruire un fattore di 12 elementi (stringhe), caratterizzato da 3
diversi livelli.
2
Costruire un fattore ordinato di 15 elementi di livelli basso < medio <
alto.
3
Quali strutture dati si potrebbero scegliere per modellare un data set
caratterizzato da un insieme di clienti di una banca morosi e non
sottoposti a 5 diversi tipi di analisi?
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
36 / 55
Lista
Le liste rappresentano un insieme ordinato di oggetti (componenti).
Le componenti possono non essere dello stesso tipo o modo. Quindi le
liste rappresentano insiemi di oggetti eterogenei.
I componenti possono essere: un vettore numerico, un valore logico, una
matrice, un array di caratteri, una funzione o un’altra lista.
La lista è una struttura dati ricorsiva, poichè una sua componente può
essere a sua volta una lista (e la lista componente può avere come
componente un’altra lista).
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
37 / 55
Lista come insieme ordinato di oggetti eterogenei
Rappresentazione di una lista composta da oggetti eterogenei: un valore
logico, un vettore di interi, un’altra lista ed una matrice di caratteri.
valore
vettore
logico
di
interi
lista
matrice di
caratteri
Elisabetta Ronchieri
T
|
1
|
5.6
|
A
D
G
2
0
5 4
− BC
B C
E F
H I
Modulo III.1 - Strutture Dati
7 Novembre 2016
38 / 55
Costruzione di una lista
La funzione list() permette di creare una lista.
I componenti delle liste sono
sempre numerati.
> l<− l i s t (T , c ( 1 , 2 , 0 ) )
> l
[[1]]
[ 1 ] TRUE
[[2]]
[1] 1 2 0
Elisabetta Ronchieri
È possibile assegnare alle
componenti un nome:
> l<− l i s t ( l o=T , v=c ( 1 , 2 , 0 ) )
> l
$lo
[ 1 ] TRUE
$v
[1] 1 2 0
Modulo III.1 - Strutture Dati
7 Novembre 2016
39 / 55
Accesso alle componenti di una lista
Esistono tre modalità di accesso alle componenti di una lista:
1
accesso tramite indice numerico racchiuso fra doppie parentesi quadre;
2
accesso tramite il nome delle componenti;
3
accesso tramite indice a caratteri.
Accedere alle componenti tramite gli operatori [[]] e [] produce risultati
sostanzialmente differenti.
Operatore [[]] seleziona l’oggetto contenuto nella lista escludendo
l’eventuale nome associato all’oggetto.
Operatore [] seleziona una sottolista, riferendosi ad un elemento di
modo list, ed includendo l’eventuale nome associato all’oggetto.
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
40 / 55
Accesso alle componenti di una lista
Supponiamo di avere la
seguente lista l.
> l <− l i s t ( l o=T ,
+ v=c ( 1 , 2 , 0 , 4 , 3 ) ,
+ m=m a t r i x ( 1 : 4 , nrow =2))
> l
$lo
[ 1 ] TRUE
$v
[1] 1 2 0 4 3
Accesso tramite indice a caratteri:
> l [ [ ”m” ] ]
[ ,1] [ ,2]
[1 ,]
1
3
[2 ,]
2
4
$m
[1 ,]
[2 ,]
[ ,1] [ ,2]
1
3
2
4
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
41 / 55
Accesso alle componenti di una lista
Supponiamo di avere la
seguente lista l.
> l <− l i s t ( l o=T ,
+ v=c ( 1 , 2 , 0 , 4 , 3 ) ,
+ m=m a t r i x ( 1 : 4 , nrow =2))
> l
$lo
[ 1 ] TRUE
$v
[1] 1 2 0 4 3
$m
[1 ,]
[2 ,]
[ ,1] [ ,2]
1
3
2
4
Elisabetta Ronchieri
Accesso tramite il nome delle componenti:
> l $lo
[ 1 ] TRUE
> l $v
[1] 1 2 0 4 3
Tramite la notazione lista$nome è possibile
accedere anche ai singoli elementi delle
componenti:
> l $v [ 4 ]
[1] 4
> l $m[ 1 , 1 ]
[1] 1
Modulo III.1 - Strutture Dati
7 Novembre 2016
42 / 55
Accesso alle componenti di una lista
Supponiamo di avere la
seguente lista l.
> l <− l i s t ( l o=T ,
+ v=c ( 1 , 2 , 0 , 4 , 3 ) ,
+ m=m a t r i x ( 1 : 4 , nrow =2))
> l
$lo
[ 1 ] TRUE
$v
[1] 1 2 0 4 3
> l
[1]
> l
[1]
> l
[[1]]
TRUE
[[2]]
1 2 0 4 3
[[3]]
[ ,1] [ ,2]
[1 ,]
1
3
[2 ,]
2
4
l[[1]] è equivalente a l$lo.
$m
[1 ,]
[2 ,]
Accesso tramite indice numerico:
[ ,1] [ ,2]
1
3
2
4
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
43 / 55
Concatenare liste
La funzione c() permette di concatenare delle liste.
> l4
[[1]]
[ 1 ] ” Corso ”
>
>
>
>
l 1<− l i s t
l 2<− l i s t
l 3<− l i s t
l 4<−c ( l 1
( ” C o r s o ” , ” a . a . 2016 / 2017 ” )
(” Prof ”)
(” Orario Lezione ”)
, l2 , l 3 )
[[2]]
[ 1 ] ” a . a . 2016 / 2017 ”
[[3]]
[ 1 ] ” Prof ”
[[4]]
[ 1 ] ” Orario Lezione ”
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
44 / 55
Esercizi
1
2
Costruire una lista l1 composta da una matrice numerica 4X4, da un
vettore di caratteri con 32 elementi, dalla stringa ”euro”, e da una
ulteriore lista composta da un vettore di 10 elementi numerici e dal
valore logico FALSE.
Estrarre dalla lista l2 cosı̀ costruita list(m=matrix(rnorm(64),
nrow=8), s=c(rep(”A”,3), rep(”B”,5)))
la seconda colonna della matrice;
le ”B” del vettore s.
Si aggiunga quindi alla lista un vettore composto da 10 numeri
casuali.
3
Accedere in 3 modi diversi alla seconda componente della lista l2.
4
Spiegare la differenza fra le due diverse modalità di accesso al primo
elemento della lista l2, usando singola [] e doppia [[]].
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
45 / 55
Data Frame
Un data frame può essere considerato come una matrice le cui colonne
rappresentano dati eterogenei.
Dati
Dato1
Dato2
Dato3
Dato4
Dato5
val.num.
3.4
5.6
6.7
8.9
9
val.car .
AB
BC
CD
DE
EF
val.log .
TRUE
FALSE
FALSE
TRUE
FALSE
val.num.
0.1
1.2
2.3
3.4
4.5
val.car .
FG
GH
HI
IL
LM
Formalmente è una lista di classe data.frame.
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
46 / 55
Data Frame
Le colonne del data frame
rappresentano variabili i cui
modi ed attributi possono
essere differenti.
Le matrici (array bidimensionale) e
gli array sono invece costituiti da
elementi omogenei per modo ed
attributo.
Dati
val.num. val.car .
Dati
val.num. val.num.
Dato1 3.4
AB
Dato1 3.4
1.2
Dato2 5.6
BC
Dato2 5.6
2.3
Dato3 6.7
CD
Dato3 6.7
3
Dato4 8.9
DE
Dato4 8.9
4
Dato5 9
EF
Dato5 9
6.7
Un data frame può essere visualizzato come una matrice e si può accedere
ai suoi elementi utilizzando indici (come per le matrici).
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
47 / 55
Componenti del data frame
Formalmente i data frame sono liste di classe data.frame.
I componenti (colonne) del data frame possono essere costituiti da:
Vettori (numerici, a caratteri, logici)
Fattori
Matrici numeriche
Liste
Altri data frame
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
48 / 55
Costruzione di data frame
I data frame sono costruiti tramite la funzione data.frame():
>
>
>
>
>
v1
v2
v3
df
df
v1
1 1
2 2
3 3
<−
<−
<−
<−
v2
5
6
7
1:3
5:7
p a s t e ( ”A” , 1 : 3 , s e p=” ” )
d a t a . frame ( v1 , v2 , v3 )
v3
A1
A2
A3
Elisabetta Ronchieri
m <−m a t r i x ( 1 : 6 , nrow =2)
v1 <− c ( ”A” , ”B” )
d f 1 <− d a t a . frame (m, v1 )
df
X1 X2 X3 v1
1 1 3 5 A
2 2 4 6 B
> v2 <− c ( ”A” , ”B” , ”C” )
> d f <− d a t a . frame (m, v2 )
E r r o r i n d a t a . frame (m, v2 ) :
a r g u m e n t s i m p l y d i f f e r i n g number o f r o w s : 2 , 3
>
>
>
>
Modulo III.1 - Strutture Dati
7 Novembre 2016
49 / 55
Accesso alle componenti e agli elementi di un data frame
Esistono due modalità di accesso alle componenti ed agli elementi dei data
frame:
1
I data frame sono liste, e quindi è possibile accedere ad essi secondo
le modalità di accesso tipiche delle liste stesse:
accesso tramite indice numerico;
accesso tramite il nome delle componenti;
accesso tramite indice a caratteri.
2
Come classe data frame, sono definiti operatori di accesso specifici o
vettori di indici con una semantica simile a quella delle matrici e degli
array.
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
50 / 55
Accesso alle componenti di un data frame
Supponiamo di avere il seguente data frame df.
> df
v1 v2 v3
1 1 5 A1
2 2 6 A2
3 3 7 A3
Accesso tramite indice
a caratteri:
> d f [ ” v1 ” ]
v1
1 1
2 2
3 3
> d f [ [ ” v1 ” ] ]
[1] 1 2 3
Elisabetta Ronchieri
Accesso tramite il
nome delle
componenti:
> d f $ v1
[1] 1 2 3
Modulo III.1 - Strutture Dati
Accesso tramite indice
numerico:
> df [ [ 1 ] ]
[1] 1 2 3
> df [ 1 ]
v1
1 1
2 2
3 3
7 Novembre 2016
51 / 55
Accesso alle componenti di un data frame
Supponiamo di avere il seguente data frame df.
> df
v1 v2 v3
1 1 5 A1
2 2 6 A2
3 3 7 A3
Accesso tramite vettori di indici:
> df [ 1 , 2 ]
[1] 5
> df [ 2 , 2 : 3 ]
v2 v3
2 6 A2
Elisabetta Ronchieri
> df [ 3 , ]
v1 v2 v3
3 3 7 A3
> df [ 2 : 3 , 1 : 2 ]
v1 v2
2 2 6
3 3 7
Modulo III.1 - Strutture Dati
7 Novembre 2016
52 / 55
Estrazione logica di osservazioni dal data frame
Supponiamo di avere il seguente data frame df.
> df
v1 v2 v3
1 1 5 A1
2 2 6 A2
Usare l’operatore > per estrarre da df solo le osservazioni la cui variabile
v1 > 1.
> d f [ d f $ v1 >1 ,]
v1 v2 v3
2 2 6 A2
Equivalentemente si può usare la funzione subset():
> s u b s e t ( df , v1 >1)
v1 v2 v3
2 2 6 A2
Se si vogliono selezionare elementi da un insieme si può usare l’operatore
%in%:
> s u b s e t ( df , v3 %i n% ”A2” )
v1 v2 v3
2 2 6 A2
Elisabetta Ronchieri
> s u b s e t ( df , v3%i n%c ( ”A2” , ”A1” ) )
v1 v2 v3
1 1 5 A1
2 2 6 A2
Modulo III.1 - Strutture Dati
7 Novembre 2016
53 / 55
Esercizi
1
Costruire un data frame df1 di 4 righe con 5 variabili di cui 3
numeriche e 2 a caratteri. Su questo estrarre:
le variabili pari;
le variabili dispari;
i dati della 2 riga;
i dati della 2 e 3 riga;
i dati dell’ultima riga;
i dati delle ultime due colonne.
2
Costruire un data frame df2 che abbia come componenti un vettore
numerico casuale v di lunghezza 10, una matrice casuale m con 4
colonne ed una lista l i cui componenti siano 2 matrici a piacere.
3
Costruire una lista l che abbia come componenti 2 vettori v1 e v2
entrambi a caratteri. Trasformare la lista in un data frame df3 tramite
la funzione as.data.frame().
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
54 / 55
Documentazione
Per ciascuna funzione visionare l’help online di R.
Vito M.R. Muggeo e Giancarlo Ferrara, Il Linguaggio R: concetti
introduttivi ed esempi, II Edizione, 2005, Cap. 2-3,
ftp://cran.r-project.org/pub/R/doc/contrib/nozioniR.pdf
W.N. Venables, D. M. Smith and the R Development Core Team, An
introduction to R, 2016, Cap. 2-6,
https://cran.r-project.org/doc/manuals/R-intro.pdf
Quick-R, Data Types,
http://statmethods.net/input/datatypes.html
Elisabetta Ronchieri
Modulo III.1 - Strutture Dati
7 Novembre 2016
55 / 55
Scarica