##################################################################### ## Introduzione a R #Impostare la directory di lavoro! #L'aritmetica con R #----------------------------------------------- 12 > 10 1+2+3 2+3*4 3/2+1 2+(3*4) (2 + 3) * 4 4*3^3 #assegnazione x <- sqrt(2) x x*3 x^3 -> y y z = exp(x) z w = log(y)+x w #uso degli operatori x x > 10 x <= 10 tf = x > 10 tf 5!=5 TRUE==1 FALSE==0 #mode() y = "Ciao" mode(y) ## Variabili e vettori #----------------------------------------------- x = c(10, 15, 6.4, 3, 18) #assegnazione del vettore x #visualizzazione del contenuto del vettore str(x) #restituisce la struttura dell'oggetto z<-1:18 #genera un vettore dei numeri da 1 a 18 seq(1,18,1.5) seq(from=1, to=18, by=1.5) #vettore da 1 a 18 con intervalli di 1.5 ?seq rep(1,15) #genera un vettore in cui si ripete 15 volte il valore 1 a = c(rep(2,3),4,5,rep(1,5),11:15) a =c(a, "Ciao") y = x[2] #seleziona il secondo elemento di x y z = x[2:4] #seleziona gli elementi dal secondo al quarto z w = x[c(2, 5)] #seleziona il secondo e il quinto elemento di x w x = c(1, 2, 4, 8, 16, 32) x x[-4] x = 1:10 x*2 x > 5 #------------------------------------------------------------ x = rep(10,8) y = c(1,2) x y x*y x+y z = c(72.6, 40.1, 59.6, 92.3, 65.4, 27.1) sort(z) #valori in ordine crescente order(z) #ordine dei valori nel vettore length(z) #numero di elementi nel vettore range(z) #range dei valori nel vettore mean(z) #media aritmetica var(z) #varianza dei valori del vettore ## Matrici #----------------------------------------------- x = matrix(c(2,3,5,7,11,13), nrow=3) x x = matrix(c(2,3,5,7,11,13), ncol=3) x X = scan("ex.data", skip = 1, quiet = TRUE) X mx = matrix(X, ncol=3, byrow=TRUE) mx dim(mx) mx[2,1] #seleziona l'elemento nella riga 2 e colonna 1 mx[2,2] #seleziona l'elemento nella riga 2 e colonna 2 mx[2, ] #estrae la seconda riga mx[ ,3] #estrae la terza colonna x = matrix(1:16, ncol=4) x y = x[c(1,4),c(3,4)] y # Array #------------------------------------------------- x = 1:20 ax = array(x, dim=c(5,2,2)) ax dim(ax) ax[3,2,1] ax[, 2, ] ax[-1,,1] #Liste #-------------------------------------------------- x1 = 1:3 x1 x2 = c("A", "B", "C","D","E") x2 x3 = matrix(1:12,nrow=3) x3 list1 = list(x1, x2, x3) list1 list1[[1]] list1[[2]] list1[[3]] list1[[3]][2,3] l1 = list1[[1]] l1 l1[2] list2 = list(comp1 = x1, comp2 = x2, comp3 = x3) list2 list2$comp2 list2$comp2[3] list2$comp3[1,] names(list2) list12=c(list1,list2) list12 ## Fattori #----------------------------------------------- country=c("Italy","Germany","France","Germany","Germany", "Germany","France","Italy","Italy","France","Italy", "Italy","Italy","Italy","Germany") countryf = factor(country) countryf levels(countryf) age = c(47,44,44,40,38,36,42,34,34,44,45,41,28,46,43) #tapply() tapply(age, countryf, mean) sex = c("F","F","M","F","F","M","F","M","M","M","M","M","F","F","M") under40 = age < 40 Workers = data.frame(Country=countryf,Age=age, Sex=sex, Under40=under40) str(Workers) Workers$Age #richiama una variabile del data frame Workers$Sex = NULL #elimina una variabile head(Workers) ##### I dati e il data frame #---------------------------------- #Leggere un file Excel library(openxlsx) #carichiamo il pacchetto #leggiamo i dati a = read.xlsx("../FoodChoices/food_coded_rev2.xlsx") #esploriamo il data set dim(a) head(a) length(a) names(a) #accediamo a elementi del data frame a[[1]] a[,1] a$GPA a[2:7,2:6] a[2:7,2] class(a[2:7,2]) a$Gender[2:7] ## trasformazione in fattore e definizione livelli a$Gender=factor(a$Gender) a$Gender levels(a$Gender)=c("Female","Male") str(a$Gender) #frequenza assoluta length(a$Gender[a$Gender=="Female"]) . a$calories_day=factor(a$calories_day) levels(a$calories_day) #N.B.: nessuna osservazione per il livello 1 #ricodifica newlev=c("not important", "moderately important", "very important") levels(a$calories_day)=newlev #Uso di filtri #----------------------------------------------- a[a$Gender=="Male", "weight"] a$weight[a$Gender=="Male"] a[a$Gender=="Female", "sports"] a$Gender[a$sport==1 & a$vitamins==1] a[a$Gender=="Female" & a$sport==2 & a$marital_status==2, c("fruit_day","veggies_day")] ## estrazione da data frame: funzione 'subset' subset(a,subset=(Gender=="Female" & a$sport==2 & a$marital_status==2), select= c("fruit_day","veggies_day")) # Frequenze #---------------------------------------------------- table(a$Gender) #assolute table(a$Gender)/length(a$Gender) #relative a$diet_current_coded=factor(a$diet_current_coded) levels(a$diet_current_coded)=c("healthy/balanced/moderated", "unhealthy/cheap/too much/random", "the same thing over and over", "unclear") tableDiet=table(a$diet_current_coded) tableDiet cbind(table(a$diet_current_coded)) margin.table(tableDiet) ## barplot: distribuzione del tipo di dieta barplot(tableDiet, names.arg = c("1", "2", "3", "4"), col=2) #Preferenze tipo di cucina a$fav_cuisine_coded=factor(a$fav_cuisine_coded) levels(a$fav_cuisine_coded)=c("none","Italian/French/Greek", "Spanish/Mexican","Arabic/Turkish", "Asian/Chinese","American", "African","Jamaican","Indian") tableCuisine=table(a$fav_cuisine_coded) tableCuisine par(mar=c(9,4,4,4)) barplot(tableCuisine, las=2, col=3) #------------------------------------------------------------- a$breakfast=factor(a$breakfast) levels(a$breakfast)=c("cereal","donut") tableBreak=table(a$Gender,a$breakfast) #creo la tabella table2 tableBreak prop.table(tableBreak) #uso il comando prop.table() prop.table(tableBreak, margin=1) round(prop.table(tableBreak, margin=1), 2) #------------------------------------------------------------- tableHealthy=table(a$diet_current_coded=="healthy/balanced/moderated", a$Gender) tableHealthy round(prop.table(tableHealthy, margin = 2), 2) # --------------------------------------------------------------- #La funzione cbind() id=1:nrow(a) #creo vettore con identificativo a =cbind(id,a) #aggiungo il vettore al data frame head(a) #aggiungiamo una nuova variabile kg=round(a$weight/2.2046, 2) a=cbind(a, kg) head(a) ### Dati mancanti #---------------------------------------------- is.na(a) #ci sono NA? # na.rm sum(a$GPA<3.5) sum(a$GPA<3.5, na.rm=TRUE) mean(a$kg) mean(a$kg, na.rm=TRUE) #dati non-mancanti a1<-a[!is.na(a$weight),] head(a1) pesomaschi=a1$kg[a1$Gender=="Male"] sum(pesomaschi>90)/length(pesomaschi) na.omit(a) # eliminiamo dati mancanti # Applicare funzioni sui data frame #----------------------------- #split e by #per suddividere in base a livelli di un fattore split(a$kg, a$Gender) # applicare una funzione ad ogni livello di un fattore by(a$kg, a$diet_current_coded, mean, na.rm = TRUE) ### Caricare il workspace "feeling.Rdata"------------------------ load("../FeelingData/feeling.Rdata") ## for (i in expr1) {expr2} #ciclo for per calcolo media for (i in 1:length(feeling)) { print(mean(feeling[, i], na.rm=TRUE)) } ## apply() per variabili dello stesso tipo Mean=apply(feeling, 2, mean, na.rm=TRUE) Mean summary(feeling) ImmCl=cut(feeling$ft_immig_2016, breaks=c(-1, 25, 50, 75, 100), labels=c("Per nulla", "Basso", "Medio", "Alto")) feeling$Immig2=factor(ImmCl) #aggiunge la colonna al data frame #write.table(feeling,file="nomefile.csv", sep=",", row.names = FALSE) ################### Rappresentazioni grafiche ######################### #Variabili categoriali pie(table(a$Gender)) #diagramma a barre par(mfrow=c(1,2),las=1, mar=c(9,4,1,1)) barplot(table(a$fav_cuisine_coded), las = 2) barplot(table(a$fav_cuisine_coded)/length(a$fav_cuisine_coded), las=2) # plot() par(mfrow=c(1,1), mar=c(9,4,1,1)) plot(a$fav_cuisine_coded, las=2) #condizioniamo rispetto a Gender par(mfrow=c(1,1),las=1) tab.cond=table(a$fav_cuisine_coded, a$Gender) barplot(prop.table(tab.cond,2),beside=T,legend=T,ylim=c(0,1.), args.legend=list(x ="top",bty="n")) #aggiungiamo i colori barplot(prop.table(tab.cond,2), beside=T, legend=T, ylim=c(0,1.), args.legend=list(x ="top",bty="n"), col=1:9) # stacked bar chart colors= rainbow(9) #vettore dei colori barplot(prop.table(tab.cond,2), legend=T, ylim=c(0,1.), args.legend=list(x ="topright",bty="n",inset=c(-0.55,0)), col=colors) ########################### # ## Variabili numeriche #---- par(mfrow=c(1,2),las=1) hist(a$kg, xlim = c(40,140)) #specifichiamo gli estremi degli intervalli con breaks hist(a$kg, breaks=c(45,65,80,95,125), xlim = c(40,140)) #ampiezza classi diversa #frequenze relative par(mfrow=c(1,1),las=1) hist(a$kg, freq=FALSE, xlim = c(40,140)) #boxplot par(mar=c(2,3,1,1),las=1) boxplot(a$GPA) par(mar=c(2,3,1,1),las=1) boxplot(a$GPA~a$Gender) ###più variabili qualitative insieme a$sports=factor(a$sports) levels(a$sports)=c("Sport_Yes", "Sport_No") tab.sc=table(a$calories_day, a$sports) mosaicplot(tab.sc, color = c("royalblue", "deepskyblue"), main = " ", cex=1.1)