X
Y
# "detach": ripristina il comportamento abituale
detach(dati)
# Creare dataframe mediante
# Le funzioni cbind() e rbind()
mat<- matrix(c(5,8,10),2,3)
mat
ri <- 4:6
ri
co <- rep(8,2)
# attacca il vettore "ri" come ulteriore riga di "mat"
rbind(mat,ri)
# attacca il vettore "co" come ulteriore colonna di "mat"
cbind(mat,co)
# creare un dataframe
dati2<-data.frame(cbind(mat,co))
# assegnare nomi alle colonne
colnames(dati2) <- c("variabile1"," variabile2"," variabile3","altro")
# Estrarre numero di righe e di colonne
# numero di righe di "mat"
nrow(mat)
# numero di colonne di "mat"
ncol(mat)
# dimensioni di "mat"
dim(mat)
# numero di elementi in "mat"
length(mat)
# Somma progressiva dei valori di una variabile (utile con valori ordinati)
cumsum(dati2$variabile1)
# Prodotto progressivo dei valori di una variabile
cumprod(dati2$variabile1)
# Somma dei valori di una variabile
sum(dati2$variabile1)
# Prodotto dei valori di una variabile
prod(dati2$variabile1)
# "function" è un nome (di comando R) riservato
somma <- function(a,b) {a+b}
somma(2,3)= 5
for(variabile a valori in un insieme){ esegui i comandi }
x <- 0 # inizializzazione di contatore
for(i in 1:10) {x <- x + i} # un ciclo è dispendioso in termini di tempo
x
sum(1:10) # se è possibile usare funzioni interne ad R
# Cicli indefiniti: while
# Struttura di un ciclo while
# while( la condizione risulta verificata ){ esegui i comandi }
x <- 0 # inizializzazione
while(x < 10) {x <- x+1}
x
x <- 0
while(x < 50000) {x <- x+1} # cicli sono dispendiosi in termini di tempo
##### 13) Scambio di dati con altri software
# avendo salvato in precedenza dati1
load("prova.RData")
write.table(dati, file = "dati.txt", sep = "\t", col.names = NA) # "\t"
tabulatore
# col.names = NA serve a creare un nome anche per la prima colonna di row.names
write.table(dati, file = "dati-excel.txt", sep = "\t", col.names = NA, dec=",")
write.table(dati, file = "dati-excel.xls", sep = "\t", col.names = NA, dec=",")
# N.B.: la versione italiana di excel usa la "," come separatore di decimali
# per re-importare un file generato da Excel
read.delim("dati-excel.xls",dec=",") # dec="," è riferito al file di ingresso
# row.names è utile per specificare dove si trovano le etichette delle righe
read.delim("dati-excel.xls",dec=",",row.names=1)
?read.table # per un help completo su come importare file di testo
?write.table # per un help completo su come esportare file di testo
# input/output di dati da SAS, SPSS, Stata e altri
library(foreign)
# output in formato TeX e HTML di dati e tabelle
library(xtable)
# Salvare l'output dei comandi di R
# INIZIO: tutto l'output di R verrà registrato nel file R-out.txt
sink("R-out.txt")
load("prova.RData")
dati
cat("\n") # spazio nella visualizzazione
str(dati)
sink() # FINE: il file viene chiuso
# Salvare la lista dei comandi
savehistory() # per salvarla
loadhistory() # per caricarla
# Utilizzare script esterni
# in un semplice file di testo si possono elencare dei comandi e
# chiedere ad R di eseguirli in sequenza
source("script.R")
# importare i dati necessari da excel
library(readxl)
store.df=read_excel("Weekly_sales.xlsx")
View(store.df)
# La vb country non è importata come fattore, occorre convertire
store.df$country=as.factor(store.df$country)
# by(): calcolare una funzione per gruppi
by(store.df$p1sales, store.df$storeNum, mean)
# aggregate(): creare un vettore ottenuto aggregando una variabile secondo una
# funzione
storeMean = aggregate(store.df$p1sales, by=list(store=store.df$storeNum), mean)
storeMean
storeMean2=aggregate(store.df$p1sales,
by=list(store=store.df$storeNum,country=store.df$country), mean)
storeMean2
names(storeMean2)=c("store","country","mean.sales")
# Aggregare con somma
p1sales.sum = aggregate(store.df$p1sales,
by=list(country=store.df$country), sum)
# Disegnare una mappa del mondo con la funzione rworldmap()
install.packages("rworldmap")
library(rworldmap) # Ricordarsi di installare la libreria
library(RColorBrewer)
# come installare un pacchetto
install.packages("datasets")
# caricare un pacchetto
library(datasets)
# chiedere aiuto ad R
help(datasets)
# caricare un dataset presente in un pacchetto
dati<-mtcars
# solo per dataset presenti nei pacchetti:
# ispezionare le variabili presenti nel dataframe
?mtcars
# descrivere il dataset: quante unità di analisi? Quante variabili?
# descrizione delle variabili
# cyl:
# mpg:
# am:
# ispezionare la struttura dei dati
str(dati)
# Accedere agli elementi di oggetti complessi di un dataframe
# mostrare la variabile am del dataset dati
dati$am
# mostrare il primo elemento della variabile am
dati$am[1]
# attach e detach servono a non ripetere dati$
attach(dati)
###########################################
# 1) Distribuzioni di frequenza
###################################
# frequenze assolute
table(am)
# frequenze relative
table(am)/length(am)
length(am)
# frequenze percentuali
table(am)/length(am)*100
# salvare la tabella di frequenza in un dataframe a parte
tab1<-data.frame(table(am)/length(am))
# frequenze cumulate
cumsum(table(am))
# frequenze cumulate
cumsum(table(cyl))
suddividere un carattere in classi
# classi di uguale ampiezza
table(cut(mpg, breaks = 3))
# ampiezza diversa
table(cut(mpg, breaks=c(10,20,30,35)))
# definire i punti estremi delle classi
classi <- c(10,20,30,35)
# classi chiuse a destra (default)
table(cut(mpg, br=classi))
# classi chiuse a sinistra
table(cut(mpg, br=classi, right=FALSE))
############
### 2) Rappresentazioni grafiche
###########
########## grafico a torta
am_factor <- factor(am)
levels(am_factor) <- c("Automatic","Manual")
pie(table(am_factor))
# grafico a torta (2)
pie(table(am_factor), density=15, col=1:4)
# diagramma a bastoncini
plot(table(am_factor),ylim = c(0, 25))
# diagramma a barre
plot(factor(gear))
# Migliorare l'aspetto del grafico a barre
?barplot
barplot(table(cyl),space=1,col="darkred",xlab="cilindri",ylab="frequenze
assolute")
#################### Istogramma
hist(mpg, br=classi)
# modificare gli assi
hist(mpg, br=classi,xlim = c(0, 40),ylim = c(0, 0.1))
# informazioni aggiuntive comprese le densità
# relativamente alle frequenze relative
hist(mpg,br=classi,plot=FALSE)
# istogramma con le frequenze
hist(mpg, br=classi, freq=TRUE) # R ci metterà in guardia per avere classi non
equiampie
# ?hist (TRUE if and only if breaks are equidistant)
# classi
hist(mpg,br=classi,xlim = c(10, 40),ylim = c(0, 0.06))
# tre classi di stessa ampiezza
hist(mpg,br=3)
# cinque classi di stessa ampiezza
hist(mpg,br=5)
# frequenza assoluta
hist(mpg,br=3,freq=TRUE)
# densità relative
hist(mpg,br=3,freq=FALSE)
# classi ottenute con il metodo di Sturges: 1+10/3*log10(n)
hist(mpg,br="Sturges")
# Migliorare l'aspetto dell'istogramma
# Aggiungere i nomi degli assi
hist(mpg, br=3,freq=FALSE,
main="Distribuzione delle Auto per classi di consumo",
xlab="Consumi (miglia al gallone)",
ylab="Densità" )
# Rendere l'istogramma colorato
hist(mpg, br=3,freq=FALSE,
main="Distribuzione delle Auto per classi di consumo",
xlab="Consumi (miglia al gallone)",
ylab="Densità",
col="lightblue") # colore delle barre
# Aggiungere la curva della densità
hist(mpg, br=3,freq=FALSE,
main="Distribuzione delle Auto per classi di consumo",
xlab="Consumi (miglia al gallone)",
ylab="Densità",
col="lightblue")
lines(density(mpg, bw=10), # bw = smoothing
type="l", col="darkred", lwd=2) # lwd = spessore della linea
# avendo utilizzato il comando attach(), occorre sempre concluderlo
detach(dati)
rm(list=ls(all=TRUE))
# importare dati di formati differenti
# libreria che contiene funzioni di importazione dati
# da formati prodotti da altri software
library(foreign)
# definire la working directory
#(cartella del computer in cui si intende lavorare) esempio:
setwd("C:\\Users\\ ")
# oppure
setwd("C:/Users/")
# NOTA: per controllare la working directory
getwd()
# importare i dati in formato csv
dati<-read.csv("viaggi_ISTAT.csv") #NOTA: utilizzo dell’opzione sep=””
# creazione di un subset senza dati mancanti
dati<-dati[complete.cases(dati),]
# eliminare i numeri di riga dal dataset importato
rownames(dati) <- NULL
attach(dati)
# grafico delle frequenze cumulate della variabile
breaks<-c(0,5,10,15,25,35)
freq<-table(cut(durata,breaks))
freq
freq_cum<-c(0,cumsum(freq))
freq_cum
plot(breaks,freq_cum,pch=16,main="Durata del viaggio", xlab="Giorni",
ylab="Frequenza cumulata")
lines(breaks,freq_cum)
############
### 2) Sintesi della distribuzione:
### Descrivere la forma e la posizione della distribuzione
###########
# restituisce il minimo di spesa_giorn
min(spesa_giorn)
# restituisce il massimo di spesa_giorn
max(spesa_giorn)
# restituisce il range (campo di variazione) di spesa_giorn
range(spesa_giorn)
# restituisce la media aritmetica di spesa_giorn
mean(spesa_giorn)
# restituisce la mediana di spesa_giorn
median(spesa_giorn)
# calcolare la mediana per caratteri qualitativi
# necessario scaricare e installare il pacchetto labstatR
install.packages("labstatR")
library(labstatR) # serve per la funzione Me()
eta_classi <- ordered(eta_classi, levels = c("<=14 anni", "15-24 anni", "25-44
anni", "> 45 anni"))
sort(eta_classi)
# calcola la mediana per caratteri qualitativi (labstatR)
Me(eta_classi)
# Non esiste una funzione diretta per il calcolo della media geometrica
exp(mean(log(spesa_giorn)))
# Percentili (Quantili)
quantile(spesa_giorn) # default = 0:4*0.25
# restituisce i quantili in spesa_giorn in corrispondenza<
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.