Crash course de R
Aquest primer capítol és un crash course d’R per començar a caminar. No és una guia ortodoxa ni exhaustiva d’R, únicament explica els conceptes i codi mínim per portar a terme les feines estadístiques bàsiques que treballarem.
ULL: R és com un Meccano i té moltes formes de fer una mateixa cosa. Aquí sempre n’explicarem una, idealment la més entenedora. No us capfiqueu amb això.
Paquets estadístics i el llenguatge R.
Tots tenim en ment a dia d’avui que “fer estadística” va aparellat a fer servir un ordinador i un programari, també conegut com paquet estadístic que fàcilment fa els calculs. Alguns dels més populars són SPSS, SAS, STATA… Segurament tots són excel·lents però són tots de pagament i no precisament econòmics. La popularitat d’R ha anat creixent en entorns sobretot acadèmics, no només pel fet de ser gratuït i de codi lliure, sino per ser en si mateix un llenguatge de programació modular, molt polivalent i amb una comunitat d’usuaris molt activa i molt procliu a contribuir ajudant a actualitzar, desenvolupar i ajudar als nouvinguts.
Un bon resum del llenguatge de programació es troba a wikipedia. Com anirem veient R pot fer des d’anàlisi de “big data”, fins a pàgines web, llibres, gràfics espectaculars, tesis doctorals, webscrapping o aquests mateixos humils apunts.
No tot són flors i violes. R “despullat” té molt mal aspecte perquè el seu “interface” nadiu és la línia d’ordres (terminal) i s’ha d’escriure codi (tot i que hi ha solucions com r-commander). És molt complex, hi ha moltes formes de fer el mateix i és molt exigent amb la gramàtica, però permet un gran nivell de control conceptual sobre el que es fa i té una forma de treballar molt reproduïble que facilita el reanàlisi i l’ètica científica. Si malgrat tot R no és per algun de vosaltres, com a mínim el podreu criticar amb coneixement de causa :).
Instal·lació d’R i RStudio
Les instruccions per instal·lar R i Rstudio estan molt ben explicades aquí i les haureu rebut per correu electrònic. La consola “pelada” d’R es veu d’aquesta forma i tot i que hi ha gent que treballa directament així, quasi tothom s’ajuda d’algun tipus d’entorn de desenvolupament:
Per tal de facilitar el treball i el control de projectes amb R, RStudio proporciona una sèrie d’avantatges i diria que és l’estàndar d’ús actualment. És gratuït i s’ha explicat la instal·lació de la versió de sobretaula. No obstant cal conèixer que existeix una versió online accessible des de qualsevol navegador amb accés a internet.
Anatomia de l’IDE.
L’ IDE (integrated development environment) és l’espai de treball on durant aquest curs ens mourem. Cal fer-li un cop d’ull i remenar, intentant entendre alguna de les seves parts. Està format (normalment) per quatre panells que es poden tunejar canviant la posició, l’aspecte i les diferents funcionalitats però resumirem les bàsiques per començar a treballar.
- Consola: Panell d’abaix a la esquerra. És on s’envien directament les instruccions a R (és com la de la figura previa). Es un intèrpret inmmediat d’ordres.
- Script: Guió en anglès, és el recull d’instruccións per realitzar una feina en R (és un arxiu de text pla amb extensió .R). Sol ocupar el panell d’adalt a l’esquerra.
- Entorn: A dalt a la dreta. És on es poden veure els objectes que tenim (ja explicarem després què és un objecte). També és l’historial d’ordres.
- Carpeta de treball: Panell d’abaix a l’esquerra. Es mostren els arxius que anem creant o necessitant pel nostre projecte.
Fent un script i un projecte en R
Podem fer moltes coses fent servir només la consola (fa una feina inmediatament), pero quan hem de fer varies operacions consecutives i les volem guardar en un ordre concret, o quan volem automatitzar l’anàlisi d’unes dades que van canviant (p.ex. augmentant el número de pacients d’un registre) els scripts són imprescindibles. Els scripts són arxius de text sense format (es poden crear al bloc de notes o similars) amb l’extensió .R. Ocupen molt poc espai i (unes poques desenes de Kb). Els scripts permeten no només reutilitzar el codi sinó reciclar i compartir-lo, i són un dels punts forts d’aquest llenguatge de programació. Es pot reciclar el codi escrit a la consola i passar-lo al script molt fàcilment.
ULL: El codi escrit a un projecte, normalment a un script, es pot comentar, és a dir, es poden posar frases que el sistema no executarà i que ens ajuden a saber què significa el nostre codi, per a què serveix, organitzar-lo o localitzar problemes que hem trobat. Per escriure un comentari fem servir un coixinet (#) al davant.
# Això és un comentariPer ultim, recomano que organitzeu les diferents anàlisis en forma de projectes. Un projecte en R assigna una carpeta on es centralitzen tots els arxius necessaris per a l’anàlisi i els seus resultats.
Dit d’un altra forma: a crear una carpeta per cada “feina” se’n diu crear un projecte. A r studio anem al menú “File”, posem “New project” i creem la carpeta (tambe dit directori de treball). Aquesta forma de fer guardarà tota la feina feta de forma automàtica allà dins (historial, dades del projecte, anàlisis, gràfics etc) i serà també allà on es guardaran per defecte els scripts. Tota aquesta informació de la sessió s’emmagatzema com un arxiu .Rproj. Si no sabem quin directori de treball tenim a R podem mirar-ho amb la funció getwd(). També podem canviar-lo amb setwd().
getwd()[1] "C:/Users/ploma/Desktop/intro_R"
Primer contacte: la consola com a calculadora.
Per inaugurar el programa, si no heu fet abans, ens posem a la consola per fer un parell de ximpleries. A la consola escrivim ordres que inmediatament executa R. La consola tal com ve és, per començar, una calculadora. Provem algunes expressions. L’ordre d’execució de les operacions segueix el principi BEDMAS (Brackets, Exponents, Division, Multiplication, Adition and Substraction).
2+6[1] 8
3+4*5[1] 23
2^6/(2*pi)[1] 10.18592
sin(8)[1] 0.9893582
sqrt(49)[1] 7
Creem objectes en R.
A part de fer de calculadora d’1€ podem assignar valors a variables i operar amb elles. R és un llenguatge orientat a objectesi en podem discutir, però veureu que si assignem un valor a una paraula, crearem un objecte sobre el que podrem treballar. Per assignar es pot fer servir el símbol “=” però per costum a R fem servir <-. Cap a la dreta també funciona pero gairebé ningú no ho fa servir ->. A R tot el que existeix és un objecte (estructures de dades, grafics, models …). En funció del tipus d’objecte R poden fer unes coses o unes altres. Per cridar un objecte, posarem el seu nom a la consola o al script.
dotzena<-12
frase<-"si tingués tres dotzenes tindria"
cat(frase, dotzena*3,"ous")si tingués tres dotzenes tindria 36 ous
Creem alguns altres objectes i emprarem funcions bàsiques una mica més divertides. Crearem un vector que és un conjunt lineal de dades iguals. Funcions són operacions que es poden fer amb objectes (de fet algunes no necesiten objecte, com veurem més endavant).
fills<-c(2,1,1,4,2,0,5,7,0,0,2,3)
length(fills)[1] 12
mean(fills)[1] 2.25
malson<-fills^2
malson [1] 4 1 1 16 4 0 25 49 0 0 4 9
mean(malson)[1] 9.416667
# una funció sense objecte
date()[1] "Mon Apr 28 09:54:35 2025"
ULL: No tot val per posar nom als objectes. A part del sentit comú i la consistència, els noms no poden tenir espais i existeixen algunes paraules “reservades” (if, else, repeat, while, function, for, in, next, break, TRUE, FALSE, NULL, Inf i entre altres). Tampoc caràcters a banda de - o _. I recordeu que R és case sensitive
Es poden renombrar els objectes amb nous noms, o bé per modificar-los o bé per crear instàncies de ells mateixos. Es coneix com a reassignació i és molt sencill.
pesadilla <- malson #crea una instància amb un altre nom
malson_doble <-malson*2 #crea un objecte partint de la modificació del primer
malson<-malson^3 #modifica el objecte per sempre.ULL: si reassignem el mateix nom a l’objecte modificat, deixem de tenir-lo tal com era. Haurem de anar al codi previ per tornar-lo a crear.
Estructures de dades mes utilitzades a R
Nomes parlaré de dues estructures de dades: els vectors y els dataframes
Vectors
Ja els hem esmentat. Són estructures unidimensionals de dades del mateix tipus (veure després datatypes). Es poden imaginar com seqüències de dades.
Es construeixen amb la funció c(). La “c” ve de concatenate. Un atribut bàsic d’un vector és la seva mida: length().Altres funcions bàsiques amb vectors son (max(), min(), sum(), seq(), mean(), sd(), rep(), sort(). Proveu-les !!!
fills [1] 2 1 1 4 2 0 5 7 0 0 2 3
lletres <-c("a", "c", "h","l", "p")
sexes <-c("H","H","D","D","D","D")
length(fills) #etc[1] 12
Es poden fer operacions matemàtiques amb vectors, de forma distributiva o si tenen el mateix tamany entre diversos vectors. També òbviament aplicar funcions.
fills*2 [1] 4 2 2 8 4 0 10 14 0 0 4 6
otro_vector <- seq(1,12,by=1)
otro_vector [1] 1 2 3 4 5 6 7 8 9 10 11 12
fills*otro_vector [1] 2 2 3 16 10 0 35 56 0 0 22 36
lletres[1] "a" "c" "h" "l" "p"
toupper(lletres)[1] "A" "C" "H" "L" "P"
sort(lletres, decreasing = T)[1] "p" "l" "h" "c" "a"
Dataframes
Els dataframes són objectes de dades tipus “files i columnes” que són la forma més habitual de treballar amb dades. Normalment cada fila és un cas o pacient i cada columna una variable d’estudi. Obrirem un dataframe d’entrenament (R en te molts que es poden tafanejar amb data()). Per fer un cop d’ull al dataframe podem fer servir head(iris), dim(iris), summary(iris)entre altres. Mes endavant coneixerem eines potents per inspecció de dataframes. Si tenim dubtes de quina classe d’objecte és alguna cosa a R, fem servir la funció class() .
class(iris) #triem el dataframe iris[1] "data.frame"
head(iris) Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
dim(iris)[1] 150 5
summary(iris) Sepal.Length Sepal.Width Petal.Length Petal.Width
Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
Median :5.800 Median :3.000 Median :4.350 Median :1.300
Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
Species
setosa :50
versicolor:50
virginica :50
Molt sovint quan treballem amb dataframes (p.ex provinents d’una taula d’excel) per fer operacions les fem tractant-les per parts. Quina és la mitjana de la mida dels petals de les flors de Iris o quina freqüència té cada espècie? O sigui que treballem amb (OMG) vectors.
Per accedir al vector que ens interessa d’un dataframe, posem el nom del dataframe, un signe de dolar i el nom de la columna (variable) que volem: iris$Sepal.Length. Sobre aquestes columnes utilitzades com vectors podem fer servir les funcions que hem conegut abans.
iris$Sepal.Length [1] 5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0 4.4 4.9 5.4 4.8 4.8 4.3 5.8 5.7 5.4 5.1
[19] 5.7 5.1 5.4 5.1 4.6 5.1 4.8 5.0 5.0 5.2 5.2 4.7 4.8 5.4 5.2 5.5 4.9 5.0
[37] 5.5 4.9 4.4 5.1 5.0 4.5 4.4 5.0 5.1 4.8 5.1 4.6 5.3 5.0 7.0 6.4 6.9 5.5
[55] 6.5 5.7 6.3 4.9 6.6 5.2 5.0 5.9 6.0 6.1 5.6 6.7 5.6 5.8 6.2 5.6 5.9 6.1
[73] 6.3 6.1 6.4 6.6 6.8 6.7 6.0 5.7 5.5 5.5 5.8 6.0 5.4 6.0 6.7 6.3 5.6 5.5
[91] 5.5 6.1 5.8 5.0 5.6 5.7 5.7 6.2 5.1 5.7 6.3 5.8 7.1 6.3 6.5 7.6 4.9 7.3
[109] 6.7 7.2 6.5 6.4 6.8 5.7 5.8 6.4 6.5 7.7 7.7 6.0 6.9 5.6 7.7 6.3 6.7 7.2
[127] 6.2 6.1 6.4 7.2 7.4 7.9 6.4 6.3 6.1 7.7 6.3 6.4 6.0 6.9 6.7 6.9 5.8 6.8
[145] 6.7 6.7 6.3 6.5 6.2 5.9
class(iris$Sepal.Length)[1] "numeric"
iris$Species [1] setosa setosa setosa setosa setosa setosa
[7] setosa setosa setosa setosa setosa setosa
[13] setosa setosa setosa setosa setosa setosa
[19] setosa setosa setosa setosa setosa setosa
[25] setosa setosa setosa setosa setosa setosa
[31] setosa setosa setosa setosa setosa setosa
[37] setosa setosa setosa setosa setosa setosa
[43] setosa setosa setosa setosa setosa setosa
[49] setosa setosa versicolor versicolor versicolor versicolor
[55] versicolor versicolor versicolor versicolor versicolor versicolor
[61] versicolor versicolor versicolor versicolor versicolor versicolor
[67] versicolor versicolor versicolor versicolor versicolor versicolor
[73] versicolor versicolor versicolor versicolor versicolor versicolor
[79] versicolor versicolor versicolor versicolor versicolor versicolor
[85] versicolor versicolor versicolor versicolor versicolor versicolor
[91] versicolor versicolor versicolor versicolor versicolor versicolor
[97] versicolor versicolor versicolor versicolor virginica virginica
[103] virginica virginica virginica virginica virginica virginica
[109] virginica virginica virginica virginica virginica virginica
[115] virginica virginica virginica virginica virginica virginica
[121] virginica virginica virginica virginica virginica virginica
[127] virginica virginica virginica virginica virginica virginica
[133] virginica virginica virginica virginica virginica virginica
[139] virginica virginica virginica virginica virginica virginica
[145] virginica virginica virginica virginica virginica virginica
Levels: setosa versicolor virginica
class(iris$Species)[1] "factor"
mean(iris$Sepal.Length)[1] 5.843333
table(iris$Species)
setosa versicolor virginica
50 50 50
Datatypes en R
Aquest és un tema complex que aquí tocarem mínimament per poder avançar. Els principals tipus de dades en R són:
| Tipus de dades | Descripció | Exemple |
|---|---|---|
| Numeric | Números reals | 3.14, -123.45 |
| Integer | Números enters | 1L, -100L |
| Logical | Valors lògics (Cert/Fals) | TRUE, FALSE |
| Character | Cadenes de text | “Hola”, ‘R’ |
| Factor | Variables categòriques | “Baix”, “Mitjà”,“Alt” |
| Date | Dates | “2022-01-31” |
| POSIXct | Dates i temps en format POSIX | “2022-01-31 12:34:56” |
| NA | Valor faltant | x<-c(1,2,3, NA, 4) |
Això té importància perquè en funció del “datatype” es poden fer unes operacions o altres (no es pot calcular la mitjana d’una seqüència de lletres pero sí d’una seqüència de números, per exemple). Per saber quin tipus de dades tenim en un vector fem servir la funció class().
lletres<- sample(c("A","B","C","D"), 20, replace = T)
numeros<- sample(c(1:50), 20, replace = T)
avui<- date()
class(lletres)[1] "character"
class(numeros)[1] "integer"
class(avui)[1] "character"
mean(lletres)Warning in mean.default(lletres): l'argument no és «numeric» ni «logical»: es
retorna NA
[1] NA
mean(numeros)[1] 23.95
numeros[numeros>10] #los que cumplen una condición [1] 32 32 27 38 32 25 12 26 37 42 28 43 16 44 23
Podem obligar a un vector d’un cert datatype a convertir-se en un altre. Aquest procés es coneix com a coerció. Sembla un concepte molt esotéric pero posarem un exemple.
Tenim una variable “sex” que està codificada com a 0 (dona) i 1 (home) procedent d’unes dades en les que estava definit com a numèric. No obstant necessitem treballar amb ella com a variable categòrica. Necessitem obligar a R a que tracti aquestes dades com a categories i no números: això és coerció. Mirem el codi:
sex<-c(0,0,1,1,1,0,0,1,0,0,1,1,1,1,0)
class(sex)[1] "numeric"
sex_cat<-as.factor(sex)
class(sex_cat)[1] "factor"
ULL: Un tipus de dada en R molt característica és l’ NA. Vol dir que no està declarat, que hi hauria de ser però no hi és. Per fer operacions comuns (mitja, mitjana, etc ) s’ha d’especificar que es vol no fer servir els NA, altrament el resultat és NA. És una font de frustració inicial important :).
x <- c(1, 2, NA, 4)
mean(x) # Devuelve NA
mean(x, na.rm = TRUE) # Devuelve 2.33, ignorando el NA
Paquets i llibreries.
R es gairebé infinit en funcionalitats però per ser més eficient quan s’instal·la només carrega un conjunt bàsic de funcionalitats (r-base). Aquestes funcionalitats es van ampliant en funció de les necessitats instal·lant els coneguts com paquets (packages) que estan compostos de llibreries. Hi ha paquets de moltes llibreries i també només d’una. Serveixen per necessitats específiques (curves ROC, mapes, gràfics pro, creació de pàgines web, paquets de colors, tutorials… o altres de ximpleries com una col·lecció d’aforismes). Els paquets s’instal·len localment a l’ordinador i després a cada sessió es carreguen les llibreries necessàries. Sona complicat pero ho farem moltes moltes vegades. Un exemple.
# install.packages("fortunes")
library(fortunes)
fortune()
Paul Gilbert: [code comparing speed of apply(z,2,sum) vs. rep(1,10000)%*%z)]
which seemed completely contrary to all my childhood teachings.
Douglas Bates: Must have had an interesting childhood if you spent it learning
about the speeds of various matrix multiplication techniques.
Paul Gilbert: [...] why is apply so slow?
Brian Ripley: 'so slow' sic: what are you going to do in the 7ms you saved?
-- Paul Gilbert, Douglas Bates, and Brian D. Ripley (discussing 'the
incredible lightness of crossprod')
R-devel (January 2005)
Es bona pràctica posar als scripts, a l’inici del codi, les libreries necessàries per executar-lo. En canvi no es recomana posar a l’script el codi per a instal·lar els paquets. La raó és que instal·lar els paquets només s’ha de fer una vegada i l’script normalment s’exectua moltes vegades (es perderia temps descarregant els arxius i reinstal·lant). A més, segons quins entorns no deixen a tots els usuaris lliure accés a internet.
Per saber quins paquets tenim instal·lats a una sessió podem mirar-ho a la pestanya “Packages” del cantó inferior dret en Rstudio, o amb codi:
installed.packages()
#un truc per evitar massa informació
paquetes<-installed.packages()
print(rownames(paquetes))Dades d’entrenament a R.
Abans d’aprendre a importar dades, una forma senzilla de disposar d’estructures de dades (dataframes) per entrenar amb R, és fer servir les que el propi programa ja conté. Solen ser dades reals d’investigacions clàssiques. També determinants “paquets” contenen dades d’entrenament. Alguns dels més emprats son iris (de flors), cars (de cotxes), Titanic (passatgers del Titànic). Per saber quins hi ha disponibles teniu la funció data(). Us apareixerà una pestanya amb tots ells i una breu explicació. Tafanejeu tot el que pugueu. Si invoqueu el nom de les dades, sortirà en consola tot el dataframe, que si és molt gros, serà dificil de llegir. Per tenir una visió més humanitzada podeu fer servir: head(), tail() que mostren les primeres o ultimes cinc files. Amb summary() tenim un resum de les variables del dataframe i breu informació descriptiva. Una funció xula del paquet dplyr, que jo faig servir tot el temps es glimpse(). Òbviament s’ha de tenir instal·Lat el paquet i cridar la llibreria.
head(iris) Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
summary(iris) Sepal.Length Sepal.Width Petal.Length Petal.Width
Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
Median :5.800 Median :3.000 Median :4.350 Median :1.300
Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
Species
setosa :50
versicolor:50
virginica :50
dplyr::glimpse(iris) Rows: 150
Columns: 5
$ Sepal.Length <dbl> 5.1, 4.9, 4.7, 4.6, 5.0, 5.4, 4.6, 5.0, 4.4, 4.9, 5.4, 4.…
$ Sepal.Width <dbl> 3.5, 3.0, 3.2, 3.1, 3.6, 3.9, 3.4, 3.4, 2.9, 3.1, 3.7, 3.…
$ Petal.Length <dbl> 1.4, 1.4, 1.3, 1.5, 1.4, 1.7, 1.4, 1.5, 1.4, 1.5, 1.5, 1.…
$ Petal.Width <dbl> 0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.3, 0.2, 0.2, 0.1, 0.2, 0.…
$ Species <fct> setosa, setosa, setosa, setosa, setosa, setosa, setosa, s…
Com heu vist, si només has de fer servir una funció d’una llibreria, la pots invocar puntualment amb la sintaxi: llibreria::funció()
Més endavant us mostraré recursos molt potents per fer anàlisi exploratòria de dades, automàtica i elegant, que és com treballen els professionals. Si teniu curiositat podeu buscar informació sobre els paquets dataExplorer, skimr o summarytools.
Importem dades.
Podem introduïr dades manualment i crear taules (taules, matrius, dataframes) escrivint codi.
pacients<- c(1:10)
sexe <- sample(c( "D","H"), 10, replace = T)
edat <- sample(18:80, 10, replace = T)
taula<- cbind(pacients,sexe,edat)
taula<- as.data.frame(taula)
taula
# la podem editar interactivament. (NO HO RECOMANO GENS) però podem
edit(taula)
Això és molt avorrit i la major part de vegades farem servir dades externes a partir d’excel, arxius separats per comes o tabulador, dades de SAS, SPSS o altres. Es pot parlar durant un parell d’hores d’això, però R Studio ho fa bastant automàtic pels origens més comuns amb el botó del panell d’ Environment “Import Dataset”. Per formats extranys farem un Google i emprarem les llibreries adients.
titanic <- read.csv("~/Escriptori/curs_hjt_24/titanic.csv")
View(titanic)Òbviament es poden exportar dades. Si cal ho mostrarem, i si no està a Google.
R base vs Tidyverse.
Per intentar alleugerir la dura pendent de la corba d’aprenentatge d’R (r-base) s’han desenvolupat diferents paquets que creen un dialecte més semblant al llenguatge natural. El més utilitzat i el que farem servir és dplyr que està dins del món Tidyverse. Tidyverse és un conjunt de paquets que comparteix una mateixa filosofia facilitant les tasques més habituals pel maneig de dades (filtrar, seleccionar, transformar, treballar amb dates…) creant un codi més compacte i entenedor. Volia explicar-lo al principi per si us ho trobeu però hi anirem treballant durant tot el curs. Posarem un exemple:
# Crear dades de mostra
datos <- data.frame(
nombre = c("Juan", "María", "Pedro", "Luis", "Ana"),
edad = c(25, 30, 35, 40, 45),
ciudad = c("Madrid", "Barcelona", "Sevilla", "Valencia", "Bilbao")
)
datos nombre edad ciudad
1 Juan 25 Madrid
2 María 30 Barcelona
3 Pedro 35 Sevilla
4 Luis 40 Valencia
5 Ana 45 Bilbao
#RBASE
# Seleccionar files on l'edat sigui major de 30
datos_mayores_30 <- datos[datos$edad > 30, ]
# Mostrar els resultats
print(datos_mayores_30) nombre edad ciudad
3 Pedro 35 Sevilla
4 Luis 40 Valencia
5 Ana 45 Bilbao
# DPLYR
# Instal·lar i carregar la llibrería dplyr
#install.packages("dplyr")
library(dplyr)
S'està adjuntant el paquet: 'dplyr'
Els següents objectes estan emmascarats des de 'package:stats':
filter, lag
Els següents objectes estan emmascarats des de 'package:base':
intersect, setdiff, setequal, union
# Seleccionar files on l'edat sigui major de 30
datos_mayores_30 <- datos %>% filter(edad > 30)
# Mostrar els resultats
print(datos_mayores_30) nombre edad ciudad
1 Pedro 35 Sevilla
2 Luis 40 Valencia
3 Ana 45 Bilbao
ULL: Una de les característiques de Tidyverse es l’ús del “PIPE” %>% o canonada. S’aconsegueix automàticament a RStudio pitjant Shift+CTRL+M . Equival a dir: Agafarem l’objecte que hi ha a l’esquerra del PIPE i li farem el que hi ha a la dreta. Es poden concatenar tantes vegades com calgui.
Les llibreries que són més conegudes i àmplicament utilitzades en tidyverse són:
- ggplot2: visualització avançada de dades
- dplyr: manipulació de dades de forma eficient i escalable (usa Rcpp)
- tidyr: funcions per ordenar dades
- readr: importa dades
- purrr: desenvolupa una mena de “dialecte” d’R que facilita moltes operacions (map, Reduce, …)
- tibble: forma moderna per conceptualitzar les dades
- magrittr: canalització per fer el codi més llegible (ús del “pipe” %>%)
- Lubridate: Manipulació avançada de dates
- haven: importar arxius SPSS, SAS y Stata de forma senzilla
- readxl: llegir arxius read.xls y .xlsx de forma senzilla i sense necessitar altres dependències
Cercant ajuda.
Començar en R és dificil, pero també està plè d’ajuda. Google és una bona forma d’encarar un dubte o un problema i internet està ple de gent que vol ajudar (stackoverflow, rpubs, twitter). No obstant hem de saber que tota funció i paquet a R té una documentació que és accesible des de la consola d’aquesta forma ? o help() , que són equivalents per buscar informació d’una funció :
?mean()
help("mean")Si volem informació en la documentació d’un paquet:
help(package="stats")Chat GPT com ajuda a R
Una de les àrees on la intel·ligència artificial ha estat més ràpidament inclosa a les tasques diaries actualment és en programació. Com que R és un llenguatge, si tenim un traductor de catalá - R i a més ens hi podem dirigir en llenguatje natural tenim una gran font d’ajuda. Com més clars tinguem els conceptes més ens ajudarà. Durant el curs el farem servir desacomplexadament, però us poso aqui un exemple per animar-vos a provar.
# Carregar les llibreries necessàries
library(dplyr)
library(ggplot2)
# Carregar les dades
titanic <- read.csv("titanic.csv")
# Filtrar els supervivents
supervivents <- titanic %>% filter(Survived == 1)
# Crear l'histograma
ggplot(supervivents, aes(x = Age)) +
geom_histogram(binwidth = 5, fill = "skyblue", color = "black") +
labs(title = "Edats dels supervivents del Titanic",
x = "Edat",
y = "Comptador") +
theme_minimal()Exercicis
Crea un projecte d’R per aquests exercicis amb el nom “Exercicis_R_1”. Posa les preguntes com a comentaris en un script i a sota la solució amb codi. Intenta resoldre tot amb el material dels apunts o fent servir la ajuda de R o Google. Com a ultim recurs el chatGPT.
Suma el quadrat d’un numero al seu cub i enmagatzema en un objecte “quadricub”
Fes l’arrel quadrada d’aquest número.
Emmagatzema en un vector que anomenarem z els números de l’1 al 200, saltant de dos en dos. Divideix el vector z entre 2. (no a ma, si us plau),
Crea els vectors y = (10, 9, 8, 7, 6, 5, 4, 3, 2, 1) i x = (7, 2, 4, 6, 4.1, 2, 9, 15, 4.1, 50).
Calcula el màxim en la posició [5] dels vectors x i y.
Quin és el valor màxim i el valor mínim del vector x?
Quant val el producte dels elements de y?
Fes una llista de tots els objectes creats fins ara.
Crea un vector anomenat W que es compongui de dues vegades el vector x, una emoticona (smiley) al centre, i després una vegada el vector y. Tal com es mostra:
W = (7, 2, 4, 6, 4.1, 2, 9, 15, 4.1, 50, 7, 2, 4, 6, 4.1, 2, 9, 15, 4.1, 50, ;), 10, 9, 8, 7, 6, 5, 4, 3, 2, 1)
Crea un vector lògic anomenat v que ens doni com a resposta TRUE si els elements de W són menors que 5 o FALSE en cas contrari.
Crea un vector de caràcters anomenat fruita que contingui 5 noms de fruita.
Investiga en chat GPT com fer un vector de numeros aleatoris, fes-lo i calcula la seva mitjana.
Crea un vector tipus factor aleatori de 20 elements amb categories “1” i “0” i etiquetes “home” i dona”
Obre i explora 5 dataframes d’entrenament d’R.
Instal·la el paquet “palmerpenguins”, carrega la llibreria penguins(), treu informació sobre la llibreria amb “help(penguins)” i inspecciona amb glimpse() les dades.
Intenta importar les teves propies dades de excel, spss o SAS i fes un cop d’ull amb les eines que ja coneixes.