Utilizando las funciones citadas en este Laboratorio, comprobad qué
paquetes tenéis instalados en vuestra versión de
RStudio e instalad el paquete MASS y el
paquete Survival y comprobad la información que
contienen.
Buscad información sobre el paquete Rcmdr (R Commander)
desde la consola
library()
En mi caso tengo varios paquetes ya que estuve trabajando tiempo en R
Para mi caso como tengo las ultimas versiones de R, me indica que
ambos paquetes ya no los tiene para la versión de R, en el caso de
Survival, igualmente hay que ver si se tienen los
paquetes
library(MASS)
library(Survival)
## Error in library(Survival): no hay paquete llamado 'Survival'
El caso de la librería Survival no se tiene disponible
es en minúscula, así como lo indicaron mis compañeros en el grupo.
library(survival)
Por último veamos la información acerca del paquete
Rcmdr
#??Rcmdr
Me envía a la parte de ayuda de R CMD command de los cuales manda como ejemplo lo siguiente
#rcmd(
# cmd,
# cmdargs = character(),
# libpath = .libPaths(),
# repos = default_repos(),
# stdout = NULL,
# stderr = NULL,
# poll_connection = TRUE,
# echo = FALSE,
# show = FALSE,
# callback = NULL,
# block_callback = NULL,
# spinner = show && interactive(),
# system_profile = FALSE,
# user_profile = "project",
# env = rcmd_safe_env(),
# timeout = Inf,
# wd = ".",
# fail_on_status = FALSE
#)
Código para hacer correr R Comander.
summary() de
tres variables que escojáis.fivenum() de dos
variables que os parezcan relevantes para el estudio.Importar el archivo de texto
FinancialSample <- read.csv("FinancialSample.txt", header=FALSE, sep=";")
Veamos la estructura de los datos
str(FinancialSample)
## 'data.frame': 700 obs. of 16 variables:
## $ V1 : chr "Government" "Government" "Midmarket" "Midmarket" ...
## $ V2 : chr "Canada" "Germany" "France" "Germany" ...
## $ V3 : chr " Carretera " " Carretera " " Carretera " " Carretera " ...
## $ V4 : chr " None " " None " " None " " None " ...
## $ V5 : num 1618 1321 2178 888 2470 ...
## $ V6 : chr " $3.00 " " $3.00 " " $3.00 " " $3.00 " ...
## $ V7 : chr " $20.00 " " $20.00 " " $15.00 " " $15.00 " ...
## $ V8 : chr " $32,370.00 " " $26,420.00 " " $32,670.00 " " $13,320.00 " ...
## $ V9 : chr " $- " " $- " " $- " " $- " ...
## $ V10: chr " $32,370.00 " " $26,420.00 " " $32,670.00 " " $13,320.00 " ...
## $ V11: chr " $16,185.00 " " $13,210.00 " " $21,780.00 " " $8,880.00 " ...
## $ V12: chr " $16,185.00 " " $13,210.00 " " $10,890.00 " " $4,440.00 " ...
## $ V13: chr "1/01/2014" "1/01/2014" "1/06/2014" "1/06/2014" ...
## $ V14: int 1 1 6 6 6 12 3 6 6 6 ...
## $ V15: chr " January " " January " " June " " June " ...
## $ V16: int 2014 2014 2014 2014 2014 2014 2014 2014 2014 2014 ...
Seleccionamos solo tres variables (V1, V2 y V5), las tres primeras
seleccion <- FinancialSample[,c(1,2,5)]
Ahora la función summary()
summary(seleccion)
## V1 V2 V5
## Length:700 Length:700 Min. : 200
## Class :character Class :character 1st Qu.: 905
## Mode :character Mode :character Median :1542
## Mean :1608
## 3rd Qu.:2229
## Max. :4492
Ahora importamos el archivo csv
MarketingDirecto <- read.csv("MarketingDirecto.csv")
Veamos la estructura de los datos
str(MarketingDirecto)
## 'data.frame': 1000 obs. of 10 variables:
## $ Edad : chr "Adulta" "Media" "Joven" "Media" ...
## $ Genero : chr "Femenino" "Masculino" "Femenino" "Masculino" ...
## $ Vivienda : chr "Propia" "Alquilada" "Alquilada" "Propia" ...
## $ Ecivil : chr "Soltero" "Soltero" "Soltero" "Casado" ...
## $ Ubicacion: chr "Lejos" "Cerca" "Cerca" "Cerca" ...
## $ Salario : int 47500 63600 13500 85600 68400 30400 48100 68400 51900 80700 ...
## $ Hijos : int 0 0 0 1 0 0 0 0 3 0 ...
## $ Historial: chr "Alto" "Alto" "Bajo" "Alto" ...
## $ Catalogos: int 6 6 18 18 12 6 12 18 6 18 ...
## $ Monto : int 755 1318 296 2436 1304 495 782 1155 158 3034 ...
Ahora seleccionemos dos variables (Salario y Monto) y buscamos un
fivenum() a las dos variables
fivenum(MarketingDirecto$Salario)
## [1] 10100 29850 53700 77050 168800
fivenum(MarketingDirecto$Monto)
## [1] 38.0 487.5 962.0 1689.0 6217.0
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
Llamamos a la libreria
library(MASS)
Ahora cargamos los datos de anorexia
data("anorexia")
Veamos los primeros registros
head(anorexia)
Para ver los tipos de datos usamos la función
str(anorexia)
str(anorexia)
## 'data.frame': 72 obs. of 3 variables:
## $ Treat : Factor w/ 3 levels "CBT","Cont","FT": 2 2 2 2 2 2 2 2 2 2 ...
## $ Prewt : num 80.7 89.4 91.8 74 78.1 88.3 87.3 75.1 80.6 78.4 ...
## $ Postwt: num 80.2 80.1 86.4 86.3 76.1 78.1 75.1 86.7 73.5 84.6 ...
Se tienen 72 observaciones en los cuales se dividen en tratamiento, wt previo y wt posterior. Ahora comprobemos cuantos valores na se tienen
colSums(is.na(anorexia))
## Treat Prewt Postwt
## 0 0 0
No se tiene ningún dato vacío, ahora veamos los null
table(is.null(anorexia))
##
## FALSE
## 1
Solo se tiene un registro en nulo, por último transformemos la variable Treat sus niveles en diferentes nombres
anorexia$Treat <- factor(anorexia$Treat, levels = c("CBT","Cont","FT"), labels = c("Cogn Beh Tr","Contr","Fam Tr"))
str(anorexia)
## 'data.frame': 72 obs. of 3 variables:
## $ Treat : Factor w/ 3 levels "Cogn Beh Tr",..: 2 2 2 2 2 2 2 2 2 2 ...
## $ Prewt : num 80.7 89.4 91.8 74 78.1 88.3 87.3 75.1 80.6 78.4 ...
## $ Postwt: num 80.2 80.1 86.4 86.3 76.1 78.1 75.1 86.7 73.5 84.6 ...
levels(anorexia$Treat)
## [1] "Cogn Beh Tr" "Contr" "Fam Tr"
MASS a
un archivo .csvMASS 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.summary() de la variable
age de melanoma y guardad la salida que os parece en un
documento .docdata("biopsy")
head(biopsy)
write.csv(biopsy,"biopsy_csv.csv")
data("Melanoma")
head(Melanoma)
write.csv(Melanoma, "Melanoma_txt.txt")
write.csv(Melanoma, "Melanoma_csv.csv")
library(openxlsx) #Para guardar como archivo excel
## Warning: package 'openxlsx' was built under R version 4.4.1
write.xlsx(Melanoma, "Melanoma_excel.xlsx")
knitr::include_graphics("img1.png")
library(knitr)
summ_age <- summary(Melanoma$age) #Guardamos en una variable
table_sum_age <- as.data.frame(t(summ_age))
kable(table_sum_age, caption = "Resumen de la variable 'age'")
| Var1 | Var2 | Freq |
|---|---|---|
| A | Min. | 4.00000 |
| A | 1st Qu. | 42.00000 |
| A | Median | 54.00000 |
| A | Mean | 52.46341 |
| A | 3rd Qu. | 65.00000 |
| A | Max. | 95.00000 |
winequality.red <- read.csv("winequality-red.csv", sep=";")
winequality.red$Type <- "red"
winequality.white <- read.csv("winequality-white.csv", sep=";")
winequality.white$Type <- "white"
Ahora vamos a unir ambos datasets
winequa <- rbind(winequality.red, winequality.white)
str(winequa)
## 'data.frame': 6497 obs. of 13 variables:
## $ fixed.acidity : num 7.4 7.8 7.8 11.2 7.4 7.4 7.9 7.3 7.8 7.5 ...
## $ volatile.acidity : num 0.7 0.88 0.76 0.28 0.7 0.66 0.6 0.65 0.58 0.5 ...
## $ citric.acid : num 0 0 0.04 0.56 0 0 0.06 0 0.02 0.36 ...
## $ residual.sugar : num 1.9 2.6 2.3 1.9 1.9 1.8 1.6 1.2 2 6.1 ...
## $ chlorides : num 0.076 0.098 0.092 0.075 0.076 0.075 0.069 0.065 0.073 0.071 ...
## $ free.sulfur.dioxide : num 11 25 15 17 11 13 15 15 9 17 ...
## $ total.sulfur.dioxide: num 34 67 54 60 34 40 59 21 18 102 ...
## $ density : num 0.998 0.997 0.997 0.998 0.998 ...
## $ pH : num 3.51 3.2 3.26 3.16 3.51 3.51 3.3 3.39 3.36 3.35 ...
## $ sulphates : num 0.56 0.68 0.65 0.58 0.56 0.56 0.46 0.47 0.57 0.8 ...
## $ alcohol : num 9.4 9.8 9.8 9.8 9.4 9.4 9.4 10 9.5 10.5 ...
## $ quality : int 5 5 5 6 5 5 5 7 7 5 ...
## $ Type : chr "red" "red" "red" "red" ...
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:
data("birthwt") #Leer los datos
max(birthwt$age)
## [1] 45
min(birthwt$age)
## [1] 14
max(birthwt$age) - min(birthwt$age)
## [1] 31
library(dplyr) #Usar la librería 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
birthwt %>% filter(bwt == min(bwt)) %>% select(smoke) #Si fumo
birthwt %>% filter(age == max(age)) %>% select(bwt)
birthwt %>% filter(ftv <= 2) %>% select(bwt)
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.
matrix(c(anorexia$Prewt, anorexia$Postwt), ncol = 2)
## [,1] [,2]
## [1,] 80.7 80.2
## [2,] 89.4 80.1
## [3,] 91.8 86.4
## [4,] 74.0 86.3
## [5,] 78.1 76.1
## [6,] 88.3 78.1
## [7,] 87.3 75.1
## [8,] 75.1 86.7
## [9,] 80.6 73.5
## [10,] 78.4 84.6
## [11,] 77.6 77.4
## [12,] 88.7 79.5
## [13,] 81.3 89.6
## [14,] 78.1 81.4
## [15,] 70.5 81.8
## [16,] 77.3 77.3
## [17,] 85.2 84.2
## [18,] 86.0 75.4
## [19,] 84.1 79.5
## [20,] 79.7 73.0
## [21,] 85.5 88.3
## [22,] 84.4 84.7
## [23,] 79.6 81.4
## [24,] 77.5 81.2
## [25,] 72.3 88.2
## [26,] 89.0 78.8
## [27,] 80.5 82.2
## [28,] 84.9 85.6
## [29,] 81.5 81.4
## [30,] 82.6 81.9
## [31,] 79.9 76.4
## [32,] 88.7 103.6
## [33,] 94.9 98.4
## [34,] 76.3 93.4
## [35,] 81.0 73.4
## [36,] 80.5 82.1
## [37,] 85.0 96.7
## [38,] 89.2 95.3
## [39,] 81.3 82.4
## [40,] 76.5 72.5
## [41,] 70.0 90.9
## [42,] 80.4 71.3
## [43,] 83.3 85.4
## [44,] 83.0 81.6
## [45,] 87.7 89.1
## [46,] 84.2 83.9
## [47,] 86.4 82.7
## [48,] 76.5 75.7
## [49,] 80.2 82.6
## [50,] 87.8 100.4
## [51,] 83.3 85.2
## [52,] 79.7 83.6
## [53,] 84.5 84.6
## [54,] 80.8 96.2
## [55,] 87.4 86.7
## [56,] 83.8 95.2
## [57,] 83.3 94.3
## [58,] 86.0 91.5
## [59,] 82.5 91.9
## [60,] 86.7 100.3
## [61,] 79.6 76.7
## [62,] 76.9 76.8
## [63,] 94.2 101.6
## [64,] 73.4 94.9
## [65,] 80.5 75.2
## [66,] 81.6 77.8
## [67,] 82.1 95.5
## [68,] 77.6 90.7
## [69,] 83.5 92.5
## [70,] 89.9 93.8
## [71,] 86.0 91.7
## [72,] 87.3 98.0
Copiad 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 y 2 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)
head(Trat_Pulmon)
subset() para seleccionar todas las
filas que tienen una edad menor que 27 años y sin incluir la columna
AltTrat_Pulmon %>% filter(Edad > 22)
Trat_Pulmon[3,4]
## [1] 79.3
subset() para seleccionar todas las
filas que tienen una edad menor que 27 años y sin incluir la columna
Altsubset(Trat_Pulmon, Edad < 27, select = -c(Alt))
Incorporad el dataset ChickWeight que contienen 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).
Para más información sobre ChickWeight: https://rdrr.io/r/datasets/ChickWeight.html
library(datasets)
data.frame(ChickWeight)
head(ChickWeight)
plot(ChickWeight$weight, col=blues9, main="Gráfico de dispersión de weight")
boxplot(ChickWeight$Time, col="green", main="Diagrama de cajas de Time")
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 dataframe 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.
Cread la variable de la diferencia
anorexia$dif <- anorexia$Prewt - anorexia$Postwt
Ahora seleccionar la variable Treat y la diferencia
anorexia_treat_df <- anorexia %>% select(Treat, dif)
head(anorexia_treat_df)
Seleccionad a los individuos que ganaron peso después del tratamiento y cread el dataframe
anorexia_treat_C_df <- anorexia %>% filter(Treat == "Contr")
head(anorexia_treat_C_df)
Entrad en https://rpubs.com/ y registraros. Crearos un perfil y
subid un documento R Markdown. Los prerequisitos son
tener instalados https://www.r-project.org/ y https://posit.co/, y el paquete knitr.
Pasos que tenéis que seguir para publicar vuestro documento:
Como solución de vuestro ejercicio, copiad el enlace de vuestra página de prueba de RPubs
Enlace de la publicación de este trabajo
Resolved los siguientes apartados
| Variable | Nombre | Características |
|---|---|---|
| Identificador | Id | carácter |
| Edad | Edad | numérica |
| Genero | Gene | 2 valores 1 = mujer, 2 = hombre |
| Tratamiento | Trat | Factor. Tres tipos de tratamiento (A, B y C) |
| Peso | Peso | numérica (en kg) |
| Estatura | Alt | numérica (en cm) |
Buscad información de vuestro conjunto de datos y de vuestras variables.
Cread una nueva variable a partir de alguna de las que tengamos. Por ejemplo, podéis calcular el IMC (IMC) = peso (kg)/ [estatura (m)]\({}^2\) e incluid la nueva variable en el conjunto de datos.
Cread dos data frames diferenciados para hombres y mujeres con dos nombres diferentes: Df_Hombres y Df_Mujeres.
Combinad de nuevo los dos ficheros anteriores y cread el primero
de nuevo con el comando rbind().
set.seed(2025) #Semilla para que los datos sean iguales
Creamos las variables
Id <- c("ID1","ID2","ID3","ID4","ID5","ID6","ID7","ID8","ID9","ID10","ID11","ID12","ID13","ID14","ID15","ID16","ID17","ID18","ID19","ID20","ID21","ID22","ID23","ID24","ID25","ID26","ID27","ID28","ID29","ID30")
Edad <- round(rnorm(n = 30, mean = 22, sd = 3),0)
Genero <- rbinom(n = 30, size = 1, prob = 0.5)
Tratamiento <- rbinom(n = 30, size = 2, prob = 0.5)
Peso <- round(rnorm(n = 30, mean = 70, sd = 6),2)
Estatura <- round(rnorm(n = 30, mean = 172, sd = 7),2)
data <- data.frame(Id, Edad, Genero, Tratamiento,
Peso, Estatura)
data$Genero <- ifelse(data$Genero == 0, 1,2)
data$Tratamiento <- ifelse(data$Tratamiento == 0, "A",
ifelse(data$Tratamiento == 1, "B","C"))
head(data)
data$Genero <- as.factor(data$Genero)
data$Tratamiento <- as.factor(data$Tratamiento)
str(data)
## 'data.frame': 30 obs. of 6 variables:
## $ Id : chr "ID1" "ID2" "ID3" "ID4" ...
## $ Edad : num 24 22 24 26 23 22 23 22 21 24 ...
## $ Genero : Factor w/ 2 levels "1","2": 1 2 2 1 1 2 2 1 1 1 ...
## $ Tratamiento: Factor w/ 3 levels "A","B","C": 3 3 2 3 2 2 3 3 2 2 ...
## $ Peso : num 73.6 73.8 72.9 78.2 63.1 ...
## $ Estatura : num 176 166 184 173 169 ...
summary(data)
## Id Edad Genero Tratamiento Peso
## Length:30 Min. :17.0 1:17 A: 6 Min. :55.30
## Class :character 1st Qu.:21.0 2:13 B:12 1st Qu.:64.70
## Mode :character Median :22.0 C:12 Median :67.58
## Mean :22.6 Mean :69.05
## 3rd Qu.:24.0 3rd Qu.:73.77
## Max. :31.0 Max. :80.30
## Estatura
## Min. :158.7
## 1st Qu.:164.9
## Median :170.3
## Mean :170.4
## 3rd Qu.:174.2
## Max. :184.0
data$Estatura <- data$Estatura/100
data$IMC <- (data$Peso) / (data$Estatura^2)
Veamos los registros
data$IMC
## [1] 23.64842 26.89956 21.52413 26.25405 22.09134 20.40362 25.49995 25.91605
## [9] 29.05308 22.43169 22.21060 22.61272 20.24045 18.60216 25.22801 25.84181
## [17] 25.06343 23.73729 21.56068 20.24197 23.63623 27.60687 24.69934 25.27390
## [25] 23.92997 21.52754 29.82913 21.73353 21.92616 26.43915
Df_Hombres <- data %>% filter(Genero == 2)
Df_Hombres
Df_Mujeres <- data %>% filter(Genero == 1)
Df_Mujeres
rbind().data_bind <- rbind(Df_Hombres, Df_Mujeres)
data_bind