Introducción a R Markdown

Encabezados

Encabezado1

Encabezado2

Encabezado3

Encabezado4

Encabezado5
Encabezado6

Listas

Ojo que al menos tiene que haber 4 espacios para anidar

  1. Elemento 1
  2. Elemento 2
    1. Elemento 2.1
      • Elemento 2.1.1
      • Elemento 2.1.2
    2. Elemento 2.2

Citas

Este texto es una cita

Tablas

La alineación es lo que va con los dos puntos y los guiones (atención)

Alineación izquierda Alineación centrado Alineación derecha
fila 1 celda 2 celda 3
fila 2 celda 5 celda 6
fila 3 celda 8 celda 9

Enlaces e imágenes

Enlaces en línea

Web de la UOC

Imágenes

Logo de la UOC
Logo de la UOC
Logo de la UOC Cuadrado 200x200
Logo de la UOC Cuadrado 200x200

También se pueden poner imagenes locales, en vez de la URL el path absoluto o relativo

Elementos para remarcar el texto

letras en cursiva

letras en negrita

letras tachadas

El texto subrayado no se recomienda porque se puede confundir con enlaces

Código ejecutable en R

En la página 15 de PID_00293461.pdf tenemos la lista de opciones de los chunks como eval, error, echo, include, message, warning y fig.cap

Formulas matemáticas

\(( \left[\overline{X} -z_{1-\frac{\alpha}{2}} \frac{\sigma}{\sqrt{n}}, \overline{X}+z_{1- \frac{\alpha}{2}}\frac{\sigma}{\sqrt{n}} \right] )\)

Hay generadores porque para las formulas se se ha heredado de LaTeX la sintaxis

Importación de datos en R y RStudio

Para importar podemos usar:

Datos Comando Extensión
Texto read.txt .txt
CSV read.csv .csv
Excel read_excel .xls
SAS read.Sas .sa7bdata

Ojo con las diferencias entre read.csv y read_csv y cosas así

Exportación de datos en R

** Ejemplo 4 **

flores = c(15,16,18,18,12,12,25,10,15,22,14,14,16,4,8,5,7,3,9,12) #floresnacidas por m2
tratamiento = c("s","s","s","s","s","s","s","s","s","s","n","n","n","n","n","n","n","n","n","n")
dataflores =data.frame(tratamiento, flores)
write.csv(dataflores, file="Prueb1.csv") #exporto a un archivo .csv
write.csv(dataflores, file="Prueb2.csv", row.names = F) #elimino los númerosde fila
# Con row.names = FALSE el CSV empieza directamente con los nombres de tus columnas 
write.table(dataflores, file="Prueb3.txt") #exporto a un archivo de texto

Con row.names = FALSE el CSV empieza directamente con los nombres de tus columnas

Estructura de datos en R

Tipología de datos

Tipos de datos Nombre Expresión en R
Datos numéricos Numeric num <- 1.0
Datos enteros Integer int <- 2
Datos lógicos Logical TRUE or FALSE
Factores Factor factor

Operadores

Operadores de asignación

num1 <- 10
num2<-20
num2=num1 
num2
## [1] 10

Operadores aritméticos

num1<-10
num2<-20

num1+num2
## [1] 30
num2/num1
## [1] 2
num2
## [1] 20

Operadores relacionales

num1==num2
## [1] FALSE
num1<num2
## [1] TRUE
num1!=num2
## [1] TRUE

Operadores lógicos

bool1<-TRUE
bool2<-FALSE
bool1&bool2
## [1] FALSE
bool1|bool2
## [1] TRUE
!bool1
## [1] FALSE

Vectores

vect <- c(1.5,2,3.5,4)
vect
## [1] 1.5 2.0 3.5 4.0

Secuencias numéricas

seq1 <- seq(0,20, by=0.5)
seq1
##  [1]  0.0  0.5  1.0  1.5  2.0  2.5  3.0  3.5  4.0  4.5  5.0  5.5  6.0  6.5  7.0
## [16]  7.5  8.0  8.5  9.0  9.5 10.0 10.5 11.0 11.5 12.0 12.5 13.0 13.5 14.0 14.5
## [31] 15.0 15.5 16.0 16.5 17.0 17.5 18.0 18.5 19.0 19.5 20.0

Matrices

datos <- c(1:20) # números del 1 al 20
celdas <- c(4,5) # 4 filas y 5 columnas

matriz <- matrix(datos,celdas)
matriz
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    5    9   13   17
## [2,]    2    6   10   14   18
## [3,]    3    7   11   15   19
## [4,]    4    8   12   16   20

Listas

vecta <- c(1,2,3,4,5)
vectb <- c("uno","dos","tres")
matriz <- matrix(1:20,ncol=4) # Al dar el ncol o nwrow ya se calcula solo la otra dimensión

lista <- list(vecta, vectb, matriz)
lista
## [[1]]
## [1] 1 2 3 4 5
## 
## [[2]]
## [1] "uno"  "dos"  "tres"
## 
## [[3]]
##      [,1] [,2] [,3] [,4]
## [1,]    1    6   11   16
## [2,]    2    7   12   17
## [3,]    3    8   13   18
## [4,]    4    9   14   19
## [5,]    5   10   15   20
# Ver la primera fila de la lista (el primer elemento)
lista [[1]]
## [1] 1 2 3 4 5
# Ver la tercera fila de la lista (el tercer elemento - la matriz)
lista [[3]]
##      [,1] [,2] [,3] [,4]
## [1,]    1    6   11   16
## [2,]    2    7   12   17
## [3,]    3    8   13   18
## [4,]    4    9   14   19
## [5,]    5   10   15   20
# Ver el primer elemento del segundo vector de la lista
lista [[2]][1]
## [1] "uno"
# Ver del tercer elemento la segunda fila y tercera columna
lista [[3]][2,3]
## [1] 12

Data frame

Igual que una matriz, pero con la estructura bidimensional que parece una matriz, todos los elementos del mismo tamaño. Las matrices son del mismo tipo todos los elementos

enteros <- c(1,2,3,4)
cadenas <- c("uno","dos","tres","cuatro")
decimales <- c(1.0,2.2,3.4,6.8)

midataframe <- data.frame(enteros,cadenas,decimales)
midataframe
##   enteros cadenas decimales
## 1       1     uno       1.0
## 2       2     dos       2.2
## 3       3    tres       3.4
## 4       4  cuatro       6.8

Conjunto de datos

#Nos bajamos el conjunto de datos birthwt de MASS
library(MASS)
data("birthwt")
View(birthwt) # Muestra dentro de RStudio la tabla
dim(birthwt) # Muestra el número de observaciones y el número de variables, es decir el número de columnas y el número de celdas
## [1] 189  10
length(birthwt) # Muestra el número de variables (columnas)
## [1] 10
head(birthwt, n=5) # Muestra las 5 primeros registros (filas)
##    low age lwt race smoke ptl ht ui ftv  bwt
## 85   0  19 182    2     0   0  0  1   0 2523
## 86   0  33 155    3     0   0  0  0   3 2551
## 87   0  20 105    1     1   0  0  0   1 2557
## 88   0  21 108    1     1   0  0  1   2 2594
## 89   0  18 107    1     1   0  0  1   0 2600
names(birthwt) # Muestra los nombres de las variables
##  [1] "low"   "age"   "lwt"   "race"  "smoke" "ptl"   "ht"    "ui"    "ftv"  
## [10] "bwt"
genero <- c(1, 2, 1, 1, 1, 2, 2, 2, 1, 2)
edad <- c(24, 25, 26, 24, 25, 27, 21, 22, 25, 26)
fuma <- c("no", "sí", "no", "sí", "no", "no", "sí", "no", "no", "sí")
MiDataf <- data.frame(genero, edad, fuma)
MiDataf
##    genero edad fuma
## 1       1   24   no
## 2       2   25   sí
## 3       1   26   no
## 4       1   24   sí
## 5       1   25   no
## 6       2   27   no
## 7       2   21   sí
## 8       2   22   no
## 9       1   25   no
## 10      2   26   sí
MiDataf[3:5, ]  #datos de los elementos de las filas de la 3 a la 5
##   genero edad fuma
## 3      1   26   no
## 4      1   24   sí
## 5      1   25   no
MiDataf[[1]] #datos de todos los elementos de la primera columna
##  [1] 1 2 1 1 1 2 2 2 1 2
MiDataf[,1] #datos de todos los elementos de la primera columna
##  [1] 1 2 1 1 1 2 2 2 1 2
MiDataf$genero #datos de todos los elementos de la primera columna
##  [1] 1 2 1 1 1 2 2 2 1 2
MiDataf[8,3] # Fila 8 colmna 3
## [1] "no"
MiDataf[[3]][8] # Fila 8 columna 3 Ojo, que según la nomenclatura se hace de una manera y otra, en esta segunda estoy accediendo al 8o elmento porque ya es un vetor
## [1] "no"
MiDataf
##    genero edad fuma
## 1       1   24   no
## 2       2   25   sí
## 3       1   26   no
## 4       1   24   sí
## 5       1   25   no
## 6       2   27   no
## 7       2   21   sí
## 8       2   22   no
## 9       1   25   no
## 10      2   26   sí
mean(MiDataf$edad[MiDataf$fuma == "no"])  # Media de edad de los pacientes que no fuman
## [1] 24.83333
mean(MiDataf$edad[MiDataf$fuma == "no" & MiDataf$genero == 1]) # Media de edad de los pacientes que no fuman y son de genero 1
## [1] 25
genero <- c(1, 2, 1, 1, 1, 2, 2, 2, 1, 2)
edad <- c(24, 25, 26, 24, 25, 27, 21, 22, 25, 26)
fuma <- c("no", "sí", "no", "sí", "no", "no", "sí", "no", "no", "sí")
MiDataf <- data.frame(genero, edad, fuma)
MiDataf
##    genero edad fuma
## 1       1   24   no
## 2       2   25   sí
## 3       1   26   no
## 4       1   24   sí
## 5       1   25   no
## 6       2   27   no
## 7       2   21   sí
## 8       2   22   no
## 9       1   25   no
## 10      2   26   sí
attach(MiDataf) # VAmos a utilizar este DataFrame
## The following objects are masked _by_ .GlobalEnv:
## 
##     edad, fuma, genero
table(edad,fuma) # Ahora creamos una tabla independiente con edad y género
##     fuma
## edad no sí
##   21  0  1
##   22  1  0
##   24  1  1
##   25  2  1
##   26  1  1
##   27  1  0
# with me permite trabajar con datos obtenidos de un DataFrame directamnete
with(MiDataf,{
  dias_edad <- MiDataf$edad * 365
  dias_edad
})
##  [1] 8760 9125 9490 8760 9125 9855 7665 8030 9125 9490

Combinar conjuntos de datos

#creamos un primer data frame sobre enfermedades
Dataf_Enf1 = data.frame (enfermedad = c("diabetes", "colesterol","hipertensión", "hipotensión"), individuos= c("ind1", "ind2", "ind3","ind4"))
Dataf_Enf1 #observamos los elementos de Enf1
##     enfermedad individuos
## 1     diabetes       ind1
## 2   colesterol       ind2
## 3 hipertensión       ind3
## 4  hipotensión       ind4
## enfermedad individuos
## 1 diabetes ind1
## 2 colesterol ind2
## 3 hipertensión ind3
## 4 hipotensión ind4
#creamos un segundo data frame idéntico en variables
Dataf_Enf2 = data.frame (enfermedad = c("diabetes", "colesterol","hipertensión", "hipotensión"), individuos= c("ind21", "ind22", "ind23","ind24"))
Dataf_Enf2 #observamos los elementos de Enf2
##     enfermedad individuos
## 1     diabetes      ind21
## 2   colesterol      ind22
## 3 hipertensión      ind23
## 4  hipotensión      ind24
## enfermedad individuos
## 1 diabetes ind21
## 2 colesterol ind22
## 3 hipertensión ind23
## 4 hipotensión ind24

#Vamos con el Inner join
inner_join <- merge(x=Dataf_Enf1, y=Dataf_Enf2)
inner_join
## [1] enfermedad individuos
## <0 rows> (o 0- extensión row.names)
# Vamos con el Full outer, fusión completa
full_outer <- merge(Dataf_Enf1,Dataf_Enf2,all=TRUE)
full_outer
##     enfermedad individuos
## 1   colesterol       ind2
## 2   colesterol      ind22
## 3     diabetes       ind1
## 4     diabetes      ind21
## 5 hipertensión      ind23
## 6 hipertensión       ind3
## 7  hipotensión      ind24
## 8  hipotensión       ind4
#Vamos con el Left outer
left_outer <- merge(x=Dataf_Enf1,y=Dataf_Enf2, all.x=TRUE)
left_outer
##     enfermedad individuos
## 1   colesterol       ind2
## 2     diabetes       ind1
## 3 hipertensión       ind3
## 4  hipotensión       ind4
# Vamos con el Right outer
right_outer <- merge(x=Dataf_Enf1, y=Dataf_Enf2, all.y=TRUE)
right_outer
##     enfermedad individuos
## 1   colesterol      ind22
## 2     diabetes      ind21
## 3 hipertensión      ind23
## 4  hipotensión      ind24
# Vamos con el cross join, producto cartesianoa
prod_cartesiano <- merge(Dataf_Enf1,Dataf_Enf2,by=NULL)
prod_cartesiano
##    enfermedad.x individuos.x enfermedad.y individuos.y
## 1      diabetes         ind1     diabetes        ind21
## 2    colesterol         ind2     diabetes        ind21
## 3  hipertensión         ind3     diabetes        ind21
## 4   hipotensión         ind4     diabetes        ind21
## 5      diabetes         ind1   colesterol        ind22
## 6    colesterol         ind2   colesterol        ind22
## 7  hipertensión         ind3   colesterol        ind22
## 8   hipotensión         ind4   colesterol        ind22
## 9      diabetes         ind1 hipertensión        ind23
## 10   colesterol         ind2 hipertensión        ind23
## 11 hipertensión         ind3 hipertensión        ind23
## 12  hipotensión         ind4 hipertensión        ind23
## 13     diabetes         ind1  hipotensión        ind24
## 14   colesterol         ind2  hipotensión        ind24
## 15 hipertensión         ind3  hipotensión        ind24
## 16  hipotensión         ind4  hipotensión        ind24
# Vamos a por el rbind, que es apilar filas
ver_rbind <- rbind(Dataf_Enf1,Dataf_Enf2)
ver_rbind
##     enfermedad individuos
## 1     diabetes       ind1
## 2   colesterol       ind2
## 3 hipertensión       ind3
## 4  hipotensión       ind4
## 5     diabetes      ind21
## 6   colesterol      ind22
## 7 hipertensión      ind23
## 8  hipotensión      ind24

Seleccionar y filtrar registros

Id<-c("I1","I2","I3","I4","I5","I6","I7","I8","I9","I10","I11","I12","I13","I14","I15","I16","I17","I18","I19","I20","I21","I22")
Edad <- c(23,24,21,22,23,25,26,24,21,22,23,25,26,24,22,21,25,26,24,21,25,27)
Sexo <-c(1,2,1,1,1,2,2,2,1,2,1,2,2,2,1,1,1,2,2,2,1,2)
Peso <-c(76.5, 81.2, 79.3, 59.5, 67.3, 78.6, 67.9, 100.2, 97.8, 56.4, 65.4,67.5, 87.4, 99.7, 87.6, 93.4, 65.4, 73.7, 85.1, 61.2, 54.8, 103.4)
Altura <-c(165,154,178,165,164,175,182,165,178,165,158,183,184,164,189,167,182,179,165,158,183,184)
Pacientes <- data.frame (Id, Edad, Sexo, Peso, Altura)

# En Prueba1 solo Id, Edad y Sexo
Prueba1 <- subset(Pacientes, select=c(Id, Edad, Sexo))
Prueba1
##     Id Edad Sexo
## 1   I1   23    1
## 2   I2   24    2
## 3   I3   21    1
## 4   I4   22    1
## 5   I5   23    1
## 6   I6   25    2
## 7   I7   26    2
## 8   I8   24    2
## 9   I9   21    1
## 10 I10   22    2
## 11 I11   23    1
## 12 I12   25    2
## 13 I13   26    2
## 14 I14   24    2
## 15 I15   22    1
## 16 I16   21    1
## 17 I17   25    1
## 18 I18   26    2
## 19 I19   24    2
## 20 I20   21    2
## 21 I21   25    1
## 22 I22   27    2
# En Prueba2 solo aquellos que la edad es mayor o igual a 24
Prueba2 <- subset(Pacientes, Edad >= 24)
Prueba2
##     Id Edad Sexo  Peso Altura
## 2   I2   24    2  81.2    154
## 6   I6   25    2  78.6    175
## 7   I7   26    2  67.9    182
## 8   I8   24    2 100.2    165
## 12 I12   25    2  67.5    183
## 13 I13   26    2  87.4    184
## 14 I14   24    2  99.7    164
## 17 I17   25    1  65.4    182
## 18 I18   26    2  73.7    179
## 19 I19   24    2  85.1    165
## 21 I21   25    1  54.8    183
## 22 I22   27    2 103.4    184
# Menore de 25 y no queremos incluir sexo
Prueba3 <- subset(Pacientes, Edad < 25, select=-c(Sexo))
Prueba3
##     Id Edad  Peso Altura
## 1   I1   23  76.5    165
## 2   I2   24  81.2    154
## 3   I3   21  79.3    178
## 4   I4   22  59.5    165
## 5   I5   23  67.3    164
## 8   I8   24 100.2    165
## 9   I9   21  97.8    178
## 10 I10   22  56.4    165
## 11 I11   23  65.4    158
## 14 I14   24  99.7    164
## 15 I15   22  87.6    189
## 16 I16   21  93.4    167
## 19 I19   24  85.1    165
## 20 I20   21  61.2    158
# Altura menor o igual a 165 y superior a 174. Aquí se juega con el el y que realmente es un o
Prueba4 <- subset(Pacientes, (Altura <= 165 | Altura > 174))
Prueba4
##     Id Edad Sexo  Peso Altura
## 1   I1   23    1  76.5    165
## 2   I2   24    2  81.2    154
## 3   I3   21    1  79.3    178
## 4   I4   22    1  59.5    165
## 5   I5   23    1  67.3    164
## 6   I6   25    2  78.6    175
## 7   I7   26    2  67.9    182
## 8   I8   24    2 100.2    165
## 9   I9   21    1  97.8    178
## 10 I10   22    2  56.4    165
## 11 I11   23    1  65.4    158
## 12 I12   25    2  67.5    183
## 13 I13   26    2  87.4    184
## 14 I14   24    2  99.7    164
## 15 I15   22    1  87.6    189
## 17 I17   25    1  65.4    182
## 18 I18   26    2  73.7    179
## 19 I19   24    2  85.1    165
## 20 I20   21    2  61.2    158
## 21 I21   25    1  54.8    183
## 22 I22   27    2 103.4    184
set.seed(999)
f <- nrow(Pacientes) #f es el tamaño del data frame a partir del número de filas.
n <- 3 #n es el tamaño de la nueva muestra aleatoria.
i <- sample(1:f, n, replace=FALSE) #i serán las posiciones de las observaciones aleatorias.
Prueba5 <- Pacientes[i,] #La nueva muestra aleatoria
Prueba5
##   Id Edad Sexo Peso Altura
## 4 I4   22    1 59.5    165
## 7 I7   26    2 67.9    182
## 9 I9   21    1 97.8    178
library(dplyr)
## 
## Adjuntando el paquete: 'dplyr'
## The following object is masked from 'package:MASS':
## 
##     select
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
data(women)
Prueba6 <- filter(women, height >58)
Prueba6
##    height weight
## 1      59    117
## 2      60    120
## 3      61    123
## 4      62    126
## 5      63    129
## 6      64    132
## 7      65    135
## 8      66    139
## 9      67    142
## 10     68    146
## 11     69    150
## 12     70    154
## 13     71    159
## 14     72    164

Visualización de los datos en R. Gráficas base

plot(iris)

hist(iris$Sepal.Length, main="Histograma de longitud del sépalo" , col="red", xlab="cm", ylab="Frecuencia", xlim=c(3,9), ylim=c(0,30))

boxplot(iris, main="Diagramas de caja", col = c("red","blue","orange","yellow"),xlab="Dimensiones",ylab="cm")

Ejercicios y casos prácticos con R

Ejercicio 2:

  1. Importad un archivo de texto y buscad un summary() de tres variables que escojáis.
  2. Importad un archivo «.csv» y buscad un fivenum() de dos variables que os parezcan relevantes para el estudio.
pacientes<-read.table("pacientes.txt",header = TRUE, sep = "\t")
summary(pacientes)
##     Nombre               Edad            Peso            Altura     
##  Length:40          Min.   :22.00   Min.   : 58.50   Min.   :156.0  
##  Class :character   1st Qu.:31.00   1st Qu.: 69.62   1st Qu.:165.4  
##  Mode  :character   Median :41.50   Median : 80.25   Median :173.0  
##                     Mean   :41.62   Mean   : 80.75   Mean   :172.9  
##                     3rd Qu.:51.50   3rd Qu.: 92.38   3rd Qu.:180.2  
##                     Max.   :62.00   Max.   :104.00   Max.   :190.0  
##    Colesterol   
##  Min.   :162.0  
##  1st Qu.:186.9  
##  Median :218.2  
##  Mean   :215.8  
##  3rd Qu.:241.8  
##  Max.   :275.5
estudiantes<-read.csv("estudiantes.csv")
# 2. fivenum() de dos variables relevantes para el estudio
fivenum(estudiantes$Horas_Estudio)
## [1]  0.000  5.500 10.625 15.750 21.250
fivenum(estudiantes$Nota_Examen)
## [1] 1.20 3.25 5.00 7.40 9.90

Ejercicio 3:

A partir del conjunto de datos anorexia del paquete MASS, que corresponden a los datos de cambio de peso de pacientes jóvenes con anorexia, mostrad los tipos de datos que contiene y comprobad si existen valores NA y NULL. Para la variable Treat, transformad los valores «CBT», «Cont» y «FT» en «Cogn Beh Tr», «Contr» y «Fam Tr», respectivamente.

data(anorexia)


#Tipos de datos que contiene
#str(anorexia)
sapply(anorexia, class) 
##     Treat     Prewt    Postwt 
##  "factor" "numeric" "numeric"
sapply(anorexia, function(col) class(col)) # Esta es la variable más larga y manual
##     Treat     Prewt    Postwt 
##  "factor" "numeric" "numeric"
# Para ver si hay algún NA
any(sapply(anorexia, function(col) any(is.na(col))))  #Esto lo que hace es mirar si hay algún na en la columna llamada col, y lo hace con la function, luego eso lo hace con todas las columnas de anoxeia, eso lo hace sapply
## [1] FALSE
anyNA(anorexia)  # Esto hace lo de arriba pero solo, es una función integrada de R
## [1] FALSE
# Para ver si hay algún NULL

# IMPORTANTE "En un data frame no puede haber NULLs por definición: un data frame es una lista de columnas que deben tener todas exactamente la misma longitud, y NULL es un objeto de longitud 0, por lo que una columna NULL rompería esa condición. Además, asignar NULL a un elemento no lo almacena, sino que lo elimina (df$columna <- NULL borra la columna, igual que lista[[3]] <- NULL elimina el elemento de una lista en el LAB1). Por ello, los valores ausentes dentro de un data frame se representan como NA, nunca como NULL."

# Reetiquetar 
valores_variable = factor(anorexia$Treat, levels=c("CBT","Cont","FT"), labels = c("Cogn Beh Tr", "Contr", "Fam Tr"))
anorexia$Treat
##  [1] Cont Cont Cont Cont Cont Cont Cont Cont Cont Cont Cont Cont Cont Cont Cont
## [16] Cont Cont Cont Cont Cont Cont Cont Cont Cont Cont Cont CBT  CBT  CBT  CBT 
## [31] CBT  CBT  CBT  CBT  CBT  CBT  CBT  CBT  CBT  CBT  CBT  CBT  CBT  CBT  CBT 
## [46] CBT  CBT  CBT  CBT  CBT  CBT  CBT  CBT  CBT  CBT  FT   FT   FT   FT   FT  
## [61] FT   FT   FT   FT   FT   FT   FT   FT   FT   FT   FT   FT  
## Levels: CBT Cont FT
valores_variable
##  [1] Contr       Contr       Contr       Contr       Contr       Contr      
##  [7] Contr       Contr       Contr       Contr       Contr       Contr      
## [13] Contr       Contr       Contr       Contr       Contr       Contr      
## [19] Contr       Contr       Contr       Contr       Contr       Contr      
## [25] Contr       Contr       Cogn Beh Tr Cogn Beh Tr Cogn Beh Tr Cogn Beh Tr
## [31] Cogn Beh Tr Cogn Beh Tr Cogn Beh Tr Cogn Beh Tr Cogn Beh Tr Cogn Beh Tr
## [37] Cogn Beh Tr Cogn Beh Tr Cogn Beh Tr Cogn Beh Tr Cogn Beh Tr Cogn Beh Tr
## [43] Cogn Beh Tr Cogn Beh Tr Cogn Beh Tr Cogn Beh Tr Cogn Beh Tr Cogn Beh Tr
## [49] Cogn Beh Tr Cogn Beh Tr Cogn Beh Tr Cogn Beh Tr Cogn Beh Tr Cogn Beh Tr
## [55] Cogn Beh Tr Fam Tr      Fam Tr      Fam Tr      Fam Tr      Fam Tr     
## [61] Fam Tr      Fam Tr      Fam Tr      Fam Tr      Fam Tr      Fam Tr     
## [67] Fam Tr      Fam Tr      Fam Tr      Fam Tr      Fam Tr      Fam Tr     
## Levels: Cogn Beh Tr Contr Fam Tr

Ejercicio 4:

  1. Exportad los datos biopsy del paquete MASS a un archivo «.csv.»
  2. Exportad los datos melanoma del paquete MASS a archivos de tres diferentes formatos y comprobad que se han creado los diferentes archivos en los formatos y las rutas especificados. Podéis generar una captura de pantalla de su ubicación en la carpeta.
  3. Generad un resumen (summary) de la variable age de melanoma y guardad la salida que os aparece en un documento .doc
  4. Buscad un data frame en algún repositorio de datos de Biomedicina, descargad un conjunto de datos en «.csv» e importad este fichero a un documento R Markdown usando el código o el menú de importación de RStudio.

Esta es una lista de algunos repositorios de datos que podemos usar:

# 1. Exportad los datos biopsy del paquete MASS a un archivo «.csv.»
library(MASS)
data(biopsy)
write.csv(biopsy, "biopsy.csv")

# 2. Exportad los datos melanoma del paquete MASS a archivos de tres diferentes formatos y comprobad que se han creado los diferentes archivos en los formatos y las rutas especificados. Podéis generar una captura de pantalla de su ubicación en la carpeta.

data(Melanoma)
write.csv(Melanoma, "Melanoma.csv")
write.table(Melanoma, "./Melanova.txt")
# install.packages("writexl")
library(writexl)
write_xlsx(Melanoma, "/home/edu/Documentos/Universidad/Master-Bioinformatica/M0.153 - Software para el análisis de datos/LAB1/Melanova.xlsx")

# 3. Generad un resumen (summary) de la variable age de melanoma y guardad la salida que os aparece en un documento .doc
# install.packages("officer")

summary(Melanoma$age)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    4.00   42.00   54.00   52.46   65.00   95.00
write(summary(Melanoma$age), "Sum_Melanoma.doc")

# 4. Buscad un data frame en algún repositorio de datos de Biomedicina, descargad un conjunto de datos en «.csv» e importad este fichero a un documento R Markdown usando el código o el menú de importación de RStudio.

dirtbike <- read.csv("dirtbike_aug.csv")

Ejercicio 5:

En el siguiente ejemplo veremos cómo utilizar diferentes operadores sobre el conjunto de datos birthwt, así como también algunas funciones que nos permiten obtener más información de las variables:

  1. ¿Cuál es la edad máxima de las madres del conjunto de datos?
  2. ¿Cuál es la edad mínima de las madres del conjunto de datos?
  3. ¿Cuál es el rango de edad de las madres?
  4. ¿Fumaba la madre cuyo recién nacido era el de menor peso?
  5. ¿Cuánto pesó el recién nacido cuya madre tenía la edad máxima?
  6. Listad los pesos de los recién nacidos, cuyas madres visitarán menos de dos veces al médico durante el primer trimestre.
# Edad máxima
data(birthwt)
edad_maxima <- max(birthwt$age)
edad_maxima
## [1] 45
# Edad mínima
edad_minima <- min(birthwt$age)
edad_minima
## [1] 14
# Rango de edad de las madres
rango_madres <- max(birthwt$age) - min(birthwt$age)
rango_madres
## [1] 31
# Fumaba madre cuyo recien nacido era de menor peso
#recien_nacido_menor_peso <- min(birthwt$bwt)
#recien_nacido_menor_peso
fumaba_madre <- birthwt$smoke[which.min(birthwt$bwt)]
fumaba_madre
## [1] 1
# Peso bebe de madre mas edad
peso_bebe <- birthwt$bwt[which.max(birthwt$age)]
peso_bebe
## [1] 4990
# Peso bebes madres visitaron menos de 2 veces medico
peso_bebe_2_veces <- birthwt$bwt[which(birthwt$ftv<2)]
peso_bebe_2_veces
##   [1] 2523 2557 2600 2622 2637 2637 2663 2665 2722 2733 2751 2769 2769 2778 2807
##  [16] 2821 2836 2863 2877 2906 2920 2920 2920 2948 2948 2977 2977 2922 3033 3062
##  [31] 3062 3062 3062 3090 3090 3100 3104 3132 3175 3175 3203 3203 3203 3225 3225
##  [46] 3232 3234 3260 3274 3317 3317 3331 3374 3374 3402 3416 3444 3459 3460 3473
##  [61] 3544 3487 3544 3572 3572 3586 3600 3614 3614 3629 3637 3643 3651 3651 3651
##  [76] 3651 3699 3728 3756 3770 3770 3770 3790 3799 3827 3884 3912 3940 3941 3941
##  [91] 3969 3997 3997 4054 4054 4111 4174 4238 4593 4990  709 1135 1330 1474 1588
## [106] 1588 1701 1729 1790 1818 1885 1893 1899 1928 1936 1970 2055 2055 2084 2084
## [121] 2100 2125 2187 2187 2211 2225 2240 2240 2282 2296 2296 2325 2353 2353 2367
## [136] 2381 2381 2381 2410 2410 2410 2424 2442 2466 2466 2495 2495

Ejercicio 6:

A partir del conjunto de datos anorexia trabajado en apartados anteriores, cread una matriz que tenga como columnas los valores de Prewt y Postwt, y cada fila sean los valores correspondientes para cada posición.

data(anorexia)

matriz_anorexia <- matrix(c(anorexia$Prewt,anorexia$Postwt))
matriz_anorexia
##         [,1]
##   [1,]  80.7
##   [2,]  89.4
##   [3,]  91.8
##   [4,]  74.0
##   [5,]  78.1
##   [6,]  88.3
##   [7,]  87.3
##   [8,]  75.1
##   [9,]  80.6
##  [10,]  78.4
##  [11,]  77.6
##  [12,]  88.7
##  [13,]  81.3
##  [14,]  78.1
##  [15,]  70.5
##  [16,]  77.3
##  [17,]  85.2
##  [18,]  86.0
##  [19,]  84.1
##  [20,]  79.7
##  [21,]  85.5
##  [22,]  84.4
##  [23,]  79.6
##  [24,]  77.5
##  [25,]  72.3
##  [26,]  89.0
##  [27,]  80.5
##  [28,]  84.9
##  [29,]  81.5
##  [30,]  82.6
##  [31,]  79.9
##  [32,]  88.7
##  [33,]  94.9
##  [34,]  76.3
##  [35,]  81.0
##  [36,]  80.5
##  [37,]  85.0
##  [38,]  89.2
##  [39,]  81.3
##  [40,]  76.5
##  [41,]  70.0
##  [42,]  80.4
##  [43,]  83.3
##  [44,]  83.0
##  [45,]  87.7
##  [46,]  84.2
##  [47,]  86.4
##  [48,]  76.5
##  [49,]  80.2
##  [50,]  87.8
##  [51,]  83.3
##  [52,]  79.7
##  [53,]  84.5
##  [54,]  80.8
##  [55,]  87.4
##  [56,]  83.8
##  [57,]  83.3
##  [58,]  86.0
##  [59,]  82.5
##  [60,]  86.7
##  [61,]  79.6
##  [62,]  76.9
##  [63,]  94.2
##  [64,]  73.4
##  [65,]  80.5
##  [66,]  81.6
##  [67,]  82.1
##  [68,]  77.6
##  [69,]  83.5
##  [70,]  89.9
##  [71,]  86.0
##  [72,]  87.3
##  [73,]  80.2
##  [74,]  80.1
##  [75,]  86.4
##  [76,]  86.3
##  [77,]  76.1
##  [78,]  78.1
##  [79,]  75.1
##  [80,]  86.7
##  [81,]  73.5
##  [82,]  84.6
##  [83,]  77.4
##  [84,]  79.5
##  [85,]  89.6
##  [86,]  81.4
##  [87,]  81.8
##  [88,]  77.3
##  [89,]  84.2
##  [90,]  75.4
##  [91,]  79.5
##  [92,]  73.0
##  [93,]  88.3
##  [94,]  84.7
##  [95,]  81.4
##  [96,]  81.2
##  [97,]  88.2
##  [98,]  78.8
##  [99,]  82.2
## [100,]  85.6
## [101,]  81.4
## [102,]  81.9
## [103,]  76.4
## [104,] 103.6
## [105,]  98.4
## [106,]  93.4
## [107,]  73.4
## [108,]  82.1
## [109,]  96.7
## [110,]  95.3
## [111,]  82.4
## [112,]  72.5
## [113,]  90.9
## [114,]  71.3
## [115,]  85.4
## [116,]  81.6
## [117,]  89.1
## [118,]  83.9
## [119,]  82.7
## [120,]  75.7
## [121,]  82.6
## [122,] 100.4
## [123,]  85.2
## [124,]  83.6
## [125,]  84.6
## [126,]  96.2
## [127,]  86.7
## [128,]  95.2
## [129,]  94.3
## [130,]  91.5
## [131,]  91.9
## [132,] 100.3
## [133,]  76.7
## [134,]  76.8
## [135,] 101.6
## [136,]  94.9
## [137,]  75.2
## [138,]  77.8
## [139,]  95.5
## [140,]  90.7
## [141,]  92.5
## [142,]  93.8
## [143,]  91.7
## [144,]  98.0

Ejercicio 7:

Copia el código siguiente en tu consola para generar un data frame con veinticinco registros y seis variables, y responde a los siguientes apartados:

Identificador <-
c("I1","I2","I3","I4","I5","I6","I7","I8","I9","I10","I11","I12","I13","I14","I15","I16","I17","I18","I19","I20","I21","I22","I23","I24","I25")
Edad <-c(23,24,21,22,23,25,26,24,21,22,23,25,26,24,22,21,25,26,24,21,25,27,26,22,29)
Sexo <-c(1,2,1,1,1,2,2,2,1,2,1,2,2,2,1,1,1,2,2,2,1,2,1,1,2) #1 para mujeres y2 para hombres
Peso <-c(76.5,81.2,79.3,59.5,67.3,78.6,67.9,100.2,97.8,56.4,65.4,67.5,87.4,99.7,87.6,93.4,65.4,73.7,85.1,61.2,54.8,103.4,65.8,71.7,85.0)
Alt <-c(165,154,178,165,164,175,182,165,178,165,158,183,184,164,189,167,182,179,165,158,183,184,189,166,175) #altura en cm
Fuma <-c("SÍ","NO","SÍ","SÍ","NO","NO","NO","SÍ","SÍ","SÍ","NO","NO","SÍ","SÍ","SÍ","SÍ","NO","NO","SÍ","SÍ","SÍ","NO","SÍ","NO","SÍ")
Trat_Pulmon <- data.frame(Identificador,Edad,Sexo,Peso,Alt,Fuma)
Trat_Pulmon
##    Identificador Edad Sexo  Peso Alt Fuma
## 1             I1   23    1  76.5 165   SÍ
## 2             I2   24    2  81.2 154   NO
## 3             I3   21    1  79.3 178   SÍ
## 4             I4   22    1  59.5 165   SÍ
## 5             I5   23    1  67.3 164   NO
## 6             I6   25    2  78.6 175   NO
## 7             I7   26    2  67.9 182   NO
## 8             I8   24    2 100.2 165   SÍ
## 9             I9   21    1  97.8 178   SÍ
## 10           I10   22    2  56.4 165   SÍ
## 11           I11   23    1  65.4 158   NO
## 12           I12   25    2  67.5 183   NO
## 13           I13   26    2  87.4 184   SÍ
## 14           I14   24    2  99.7 164   SÍ
## 15           I15   22    1  87.6 189   SÍ
## 16           I16   21    1  93.4 167   SÍ
## 17           I17   25    1  65.4 182   NO
## 18           I18   26    2  73.7 179   NO
## 19           I19   24    2  85.1 165   SÍ
## 20           I20   21    2  61.2 158   SÍ
## 21           I21   25    1  54.8 183   SÍ
## 22           I22   27    2 103.4 184   NO
## 23           I23   26    1  65.8 189   SÍ
## 24           I24   22    1  71.7 166   NO
## 25           I25   29    2  85.0 175   SÍ
# a) Seleccionad los registros con edad > 22.
mas_de_22 <- Trat_Pulmon[Trat_Pulmon$Edad>22,]
mas_de_22 
##    Identificador Edad Sexo  Peso Alt Fuma
## 1             I1   23    1  76.5 165   SÍ
## 2             I2   24    2  81.2 154   NO
## 5             I5   23    1  67.3 164   NO
## 6             I6   25    2  78.6 175   NO
## 7             I7   26    2  67.9 182   NO
## 8             I8   24    2 100.2 165   SÍ
## 11           I11   23    1  65.4 158   NO
## 12           I12   25    2  67.5 183   NO
## 13           I13   26    2  87.4 184   SÍ
## 14           I14   24    2  99.7 164   SÍ
## 17           I17   25    1  65.4 182   NO
## 18           I18   26    2  73.7 179   NO
## 19           I19   24    2  85.1 165   SÍ
## 21           I21   25    1  54.8 183   SÍ
## 22           I22   27    2 103.4 184   NO
## 23           I23   26    1  65.8 189   SÍ
## 25           I25   29    2  85.0 175   SÍ
# b) Seleccionad el elemento 3 de la columna 4 del conjunto de datos (contando el identificador).

Trat_Pulmon[3,4]
## [1] 79.3
# c) Usad el comando subset() para seleccionar todas las filas que tienen una edad menor que 27 años y sin incluir la columna Alt.

menos_de_27 <- subset(Trat_Pulmon, Edad <27)
menos_de_27
##    Identificador Edad Sexo  Peso Alt Fuma
## 1             I1   23    1  76.5 165   SÍ
## 2             I2   24    2  81.2 154   NO
## 3             I3   21    1  79.3 178   SÍ
## 4             I4   22    1  59.5 165   SÍ
## 5             I5   23    1  67.3 164   NO
## 6             I6   25    2  78.6 175   NO
## 7             I7   26    2  67.9 182   NO
## 8             I8   24    2 100.2 165   SÍ
## 9             I9   21    1  97.8 178   SÍ
## 10           I10   22    2  56.4 165   SÍ
## 11           I11   23    1  65.4 158   NO
## 12           I12   25    2  67.5 183   NO
## 13           I13   26    2  87.4 184   SÍ
## 14           I14   24    2  99.7 164   SÍ
## 15           I15   22    1  87.6 189   SÍ
## 16           I16   21    1  93.4 167   SÍ
## 17           I17   25    1  65.4 182   NO
## 18           I18   26    2  73.7 179   NO
## 19           I19   24    2  85.1 165   SÍ
## 20           I20   21    2  61.2 158   SÍ
## 21           I21   25    1  54.8 183   SÍ
## 23           I23   26    1  65.8 189   SÍ
## 24           I24   22    1  71.7 166   NO

Ejercicio 8:

Incorporad el dataset ChickWeight que contiene información sobre el peso de 578 pollitos en gramos (weight), el tiempo desde la medición al nacer (Time), una variable identificadora de cada pollito (Chick) a partir del rango de peso y una variable factor con el tipo de dieta experimental que cada pollito recibió (Diet).

  1. Incorporad el conjunto de datos ChickWeight del paquete datasets a vuestro entorno de trabajo.
  2. Generad un gráfico de dispersión de la variable weight.
  3. Cread un diagrama de caja con la variable Time.

Para más información sobre ChickWeight: https://rdrr.io/r/datasets/ChickWeight.html

data(ChickWeight)

plot(ChickWeight$weight)

boxplot(ChickWeight$Time)

Ejercicio 9:

A partir del conjunto de datos anorexia del paquete MASS, cread otro data frame que se llame anorexia_treat_df formado por Treat y por un vector nuevo calculado a partir de la diferencia Prewt-Postwt. De esta manera, nos quedará un data frame que contenga el tipo de tratamiento y el valor del peso ganado o perdido después de haber realizado el tratamiento.

Seleccionad aquellos individuos que han ganado peso después del tratamiento y cread un nuevo conjunto llamado anorexia_treat_C_df que contenga solo los datos de aquellos que han seguido el tratamiento «Cont» y que han ganado peso después del tratamiento.

library(MASS)
data(anorexia)

dif_peso <- anorexia$Postwt - anorexia$Prewt
anorexia_treat_df <- data.frame(anorexia$Treat, dif_peso)
anorexia_treat_df
##    anorexia.Treat dif_peso
## 1            Cont     -0.5
## 2            Cont     -9.3
## 3            Cont     -5.4
## 4            Cont     12.3
## 5            Cont     -2.0
## 6            Cont    -10.2
## 7            Cont    -12.2
## 8            Cont     11.6
## 9            Cont     -7.1
## 10           Cont      6.2
## 11           Cont     -0.2
## 12           Cont     -9.2
## 13           Cont      8.3
## 14           Cont      3.3
## 15           Cont     11.3
## 16           Cont      0.0
## 17           Cont     -1.0
## 18           Cont    -10.6
## 19           Cont     -4.6
## 20           Cont     -6.7
## 21           Cont      2.8
## 22           Cont      0.3
## 23           Cont      1.8
## 24           Cont      3.7
## 25           Cont     15.9
## 26           Cont    -10.2
## 27            CBT      1.7
## 28            CBT      0.7
## 29            CBT     -0.1
## 30            CBT     -0.7
## 31            CBT     -3.5
## 32            CBT     14.9
## 33            CBT      3.5
## 34            CBT     17.1
## 35            CBT     -7.6
## 36            CBT      1.6
## 37            CBT     11.7
## 38            CBT      6.1
## 39            CBT      1.1
## 40            CBT     -4.0
## 41            CBT     20.9
## 42            CBT     -9.1
## 43            CBT      2.1
## 44            CBT     -1.4
## 45            CBT      1.4
## 46            CBT     -0.3
## 47            CBT     -3.7
## 48            CBT     -0.8
## 49            CBT      2.4
## 50            CBT     12.6
## 51            CBT      1.9
## 52            CBT      3.9
## 53            CBT      0.1
## 54            CBT     15.4
## 55            CBT     -0.7
## 56             FT     11.4
## 57             FT     11.0
## 58             FT      5.5
## 59             FT      9.4
## 60             FT     13.6
## 61             FT     -2.9
## 62             FT     -0.1
## 63             FT      7.4
## 64             FT     21.5
## 65             FT     -5.3
## 66             FT     -3.8
## 67             FT     13.4
## 68             FT     13.1
## 69             FT      9.0
## 70             FT      3.9
## 71             FT      5.7
## 72             FT     10.7
#Los que han ganado peso
ganado_peso <- subset(anorexia_treat_df, dif_peso>0)
ganado_peso
##    anorexia.Treat dif_peso
## 4            Cont     12.3
## 8            Cont     11.6
## 10           Cont      6.2
## 13           Cont      8.3
## 14           Cont      3.3
## 15           Cont     11.3
## 21           Cont      2.8
## 22           Cont      0.3
## 23           Cont      1.8
## 24           Cont      3.7
## 25           Cont     15.9
## 27            CBT      1.7
## 28            CBT      0.7
## 32            CBT     14.9
## 33            CBT      3.5
## 34            CBT     17.1
## 36            CBT      1.6
## 37            CBT     11.7
## 38            CBT      6.1
## 39            CBT      1.1
## 41            CBT     20.9
## 43            CBT      2.1
## 45            CBT      1.4
## 49            CBT      2.4
## 50            CBT     12.6
## 51            CBT      1.9
## 52            CBT      3.9
## 53            CBT      0.1
## 54            CBT     15.4
## 56             FT     11.4
## 57             FT     11.0
## 58             FT      5.5
## 59             FT      9.4
## 60             FT     13.6
## 63             FT      7.4
## 64             FT     21.5
## 67             FT     13.4
## 68             FT     13.1
## 69             FT      9.0
## 70             FT      3.9
## 71             FT      5.7
## 72             FT     10.7
anorexia_treat_C_df <- anorexia_treat_df[anorexia_treat_df$anorexia.Treat == ("Cont"), ]
anorexia_treat_C_df
##    anorexia.Treat dif_peso
## 1            Cont     -0.5
## 2            Cont     -9.3
## 3            Cont     -5.4
## 4            Cont     12.3
## 5            Cont     -2.0
## 6            Cont    -10.2
## 7            Cont    -12.2
## 8            Cont     11.6
## 9            Cont     -7.1
## 10           Cont      6.2
## 11           Cont     -0.2
## 12           Cont     -9.2
## 13           Cont      8.3
## 14           Cont      3.3
## 15           Cont     11.3
## 16           Cont      0.0
## 17           Cont     -1.0
## 18           Cont    -10.6
## 19           Cont     -4.6
## 20           Cont     -6.7
## 21           Cont      2.8
## 22           Cont      0.3
## 23           Cont      1.8
## 24           Cont      3.7
## 25           Cont     15.9
## 26           Cont    -10.2