Electiva en R

1 primera clase

para crear un chunk o linea de codigo ctrl+alt+i

1.1 ¿como definir una varibale?

x<-5
y<-2*3

los valores se asignan con una “<” y un “-” seguidos, ahí se puede definir sea un valor, una matriz, un data frame, lo que uno escriba se va a pestaña de environment.

si yo quiero hacer que esas variables se sume u se muestre en la consola debo de utilizar la función print

print(x+y)
## [1] 11

1.2 ahora se define un conjunto de datos o un vector

print(z<-c(1,7,8,9,5))
## [1] 1 7 8 9 5

Es importante tener en cuenta algo, los vactores son conjunto de datos, por ende, para unir o cocatenar ese conjunto de datos siempre debe estar con la letra c sino, la variable no se va a definir,

vector mal hecho (1,2,3,4,5) Vector bien hecho c(1,2,3,4,5)

1.3 ¿cuantos numeros hay en ese vector?

para ver cuantos elementos hay en un vector se utiliza la función leght

length(z)
## [1] 5

1.4 ¿y si solo quiero ver un valor de un vector

para esto se utiliza corchetes[] y la posición del valor que se quiera buscar, es decir

z[2]
## [1] 7

1.5 Pero solo quiero ver de un numero a otro

Se utiliza los corchetes y dos puntos entre las posiciones, voy a poner 2 ejemplos

ejemplo 1 solo se va mostrar de la posición 1 a la 3

z[1:3]
## [1] 1 7 8

ejemplo 2 ahora solo que me muestre de la pocisión 4 a la 5

z[4:5]
## [1] 9 5

1.6 pero yo quiero quitar un numero d eun vector

entoneces se pone corchetes menos y la pocisión [-x]

z[-3]
## [1] 1 7 9 5

1.7 y si quiero quitar varios

entones se utiliza cocatenar así

z[-c(2,4)]
## [1] 1 8 5

1.8 si quiero mostrar un vector al reves

entonces se utiliza la función rev

rev(z)
## [1] 5 9 8 7 1

1.9 intervalo de numero naturales sin escribirlo

si quiero definir un intervalo de numeros naturales es de esta forma, entre el numero que se comienza y el que se termina

v<-(1:25)
print(v)
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

1.10 secuencía

cada vez que le doy una , de tomar el primer numero, luego vaya hasta el numero y salte los numeros

seq(5,20,2)
## [1]  5  7  9 11 13 15 17 19
a<-(seq(5,20,2))

1.11 repetir

Facil se escribe rep(la variable que se quiere repetir y las veces que se quiere repetir)

rep(a,7)
##  [1]  5  7  9 11 13 15 17 19  5  7  9 11 13 15 17 19  5  7  9 11 13 15 17 19  5
## [26]  7  9 11 13 15 17 19  5  7  9 11 13 15 17 19  5  7  9 11 13 15 17 19  5  7
## [51]  9 11 13 15 17 19

2 segunda clase

2.1 crear una matriz

Una matriz en R es una estructura de datos para almacenar objetos del mismo tipo. Si quieres almacenar diferentes objetos dentro de una estructura de datos en R, usa un data frame en su lugar.

X<-c(1,2,3)
Y<-c(4,5,6)
Z<-c(7,8,9)
A<- matrix(c(X,Y,Z))

2.2 length y dim

En R, length() devuelve el número total de elementos en un objeto (como un vector), mientras que dim() devuelve las dimensiones (filas y columnas) de objetos multidimensionales como matrices, data frames y arrays.

length(A)
## [1] 9
dim(A)
## [1] 9 1

##organizar un vector 3x3

toma un objeto existente llamado a (generalmente un vector) y lo reorganiza para convertirlo en una matriz de 3 filas y 3 columnas. ejemplo

#c igual a 3x3 c es organizar
dim(A)<-c(3,3)

print(A)
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9

con c(3, 3): La función c() crea un vector. En este caso, crea un vector numérico con dos elementos: 3 y 3. Al usarlo con dim(), el primer número representa las filas y el segundo, las columnas.

2.3 nrow y ncol

erow sirve para ver numero de filas y ecol numero de columnas, es decir

ncol(A)
## [1] 3
nrow(A)
## [1] 3

##byrow byrow le dice a R cómo ordenar los datos al crear una matriz: si debe llenarla por filas (horizontalmente) o por columnas (verticalmente). byrow = TRUE (por fila) byrow = FALSE (por columna)

C<-matrix(c(X,Y,Z),nrow = 3,ncol = 3, byrow = TRUE)

print(C)
##      [,1] [,2] [,3]
## [1,]    1    2    3
## [2,]    4    5    6
## [3,]    7    8    9

cambio las filas por columnas

2.4 View

view nos sirve para ver la matriz o el data fame de manera más amigable

#View(C)

2.5 fix

y fix sirve para arreglar las varibales

#fix(C)

3 tercer clase

3.1 cbind

combinar como columnas

d <-cbind(X,Y,Z)
print(d)
##      X Y Z
## [1,] 1 4 7
## [2,] 2 5 8
## [3,] 3 6 9

3.2 rbind

combinar como filas

e <-rbind(X,Y,Z)
print(e)
##   [,1] [,2] [,3]
## X    1    2    3
## Y    4    5    6
## Z    7    8    9

3.3 cambiar sub indices

rownames(d) <- c("pedro","paco","luis")
colnames(d) <- c("edad","nombre", "resulta")
print(d)
##       edad nombre resulta
## pedro    1      4       7
## paco     2      5       8
## luis     3      6       9

3.4 dataframe (una tabla de excel pues)

primero definimos las variables

mes<-c("enero","febrero" ,"marzo" ,"abril")
juan<- c(3,4,1,5)
elian<-c(1,1,0,5)
isis<-c(5,5,5,5)

luego creamos el data frame con data.frame y dandolo a una variale

notas<-data.frame(mes,juan,elian,isis)
print(notas)
##       mes juan elian isis
## 1   enero    3     1    5
## 2 febrero    4     1    5
## 3   marzo    1     0    5
## 4   abril    5     5    5

3.4.1 ver solo una parte de el dataframe

notas$juan
## [1] 3 4 1 5

3.5 Funciones de estadistica descriptiva

3.5.1 media

mean(notas$juan)
## [1] 3.25

3.5.2 mediana

median(notas$juan)
## [1] 3.5

3.5.3 maximo

max(notas$juan)
## [1] 5

3.5.4 minimo

min(notas$juan)
## [1] 1

3.5.5 desviación estandar

sd(juan)
## [1] 1.707825

3.5.6 Rango

range(notas$juan)
## [1] 1 5

3.6 librerias o paquetes

paquetes son funciones que crean las personas, de utilidades, va necesitar instalar el paquete, y ejecutar el paquete

3.6.1 instatalar paquetes

#install.packages("tidyverse")

aqui se va a instalar tidyverse que es uno de los paquetes más inportantes de r para hacer analisis de datos

los paquetes solo se tienen que instalar una vez

3.6.2 Ejecutar paquetes

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.2     ✔ tibble    3.3.0
## ✔ lubridate 1.9.4     ✔ tidyr     1.3.1
## ✔ purrr     1.1.0     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors

ya con tidyverse podemos ver lo siguiente

3.7 ver variables estadisticas gracias a tidyverse

summary(notas)
##      mes                 juan          elian           isis  
##  Length:4           Min.   :1.00   Min.   :0.00   Min.   :5  
##  Class :character   1st Qu.:2.50   1st Qu.:0.75   1st Qu.:5  
##  Mode  :character   Median :3.50   Median :1.00   Median :5  
##                     Mean   :3.25   Mean   :1.75   Mean   :5  
##                     3rd Qu.:4.25   3rd Qu.:2.00   3rd Qu.:5  
##                     Max.   :5.00   Max.   :5.00   Max.   :5

4 cuarta y quinta

4.1 medidas de tendencia central

x<- sample.int(15)
mean(x)
## [1] 8
max(x)
## [1] 15
min(x)
## [1] 1
range(x)
## [1]  1 15
median(x)
## [1] 8
sd(x)
## [1] 4.472136
var(x)
## [1] 20

x <- sample.int(15): Esta línea crea un objeto (un vector) llamado x. La función sample.int(15) genera una muestra aleatoria de los números enteros del 1 al 15, en un orden aleatorio y sin repetirlos.

mean(x): Calcula el promedio (la media aritmética) de todos los números guardados en x.

max(x): Encuentra el valor máximo (el número más grande) dentro de x.

min(x): Encuentra el valor mínimo (el número más pequeño) dentro de x.

range(x): Devuelve el valor mínimo y el máximo de x juntos.

median(x): Calcula la mediana, que es el valor que se encuentra justo en el medio de la lista de números cuando están ordenados.

sd(x): Calcula la desviación estándar (standard deviation). Esta es una medida de dispersión que indica qué tan esparcidos están los números con respecto al promedio. Un valor bajo significa que los datos están agrupados cerca del promedio.

var(x): Calcula la varianza. Es otra medida de dispersión y es simplemente la desviación estándar elevada al cuadrado.

4.2 operaciones con matrices

y <- matrix(sample.int(10), nrow =2, ncol =5)
colSums(y)
## [1] 10 14 14 12  5
rowSums(y)
## [1] 30 25
colMeans(y)
## [1] 5.0 7.0 7.0 6.0 2.5
colMeans(y)
## [1] 5.0 7.0 7.0 6.0 2.5

y <- matrix(sample.int(10), nrow = 2, ncol = 5): Esta línea crea una matriz llamada y. sample.int(10): Genera una muestra aleatoria de los números del 1 al 10. nrow = 2, ncol = 5: Organiza esos números en una tabla con 2 filas (rows) y 5 columnas (columns).

colSums(y): Calcula la suma de cada columna de la matriz y.

rowSums(y): Calcula la suma de cada fila de la matriz y.

colMeans(y): Calcula el promedio de cada columna de la matriz y.

data("chickwts")
#View(chickwts)
mean(chickwts$weight)
## [1] 261.3099

4.3 Trabajando con un Conjunto de Datos (chickwts)

mean(chickwts$weight[chickwts$feed=="soybean"])
## [1] 246.4286

data(“chickwts”): Carga el conjunto de datos llamado chickwts (pesos de pollitos) en tu sesión de R. Este dataset contiene información sobre el peso de pollitos según el tipo de alimento que recibieron.

View(chickwts): El # al inicio convierte esta línea en un comentario. Esto significa que R no la ejecutará. Si le quitaras el #, se abriría una nueva pestaña mostrándote la tabla chickwts completa.

mean(chickwts$weight): Calcula el promedio de la columna weight (peso) del conjunto de datos chickwts. El símbolo $ se usa para acceder a una columna específica dentro de una tabla (o data frame).

4.4 graficos de dispersión chickwts

w <- seq(2,20,2) 
y <- c(95,81,72,75,79,71,55,47,32,24) 
z <- c(71,74,64,68,59,63,68,71,78,74)
plot(w,y)

w <- seq(2, 20, 2): Crea un vector w que contiene una secuencia de números que empieza en 2, termina en 20 y va de 2 en 2 (es decir: 2, 4, 6, …, 20).

y <- c(…) y z <- c(…): La función c() sirve para combinar o concatenar valores en un vector. Aquí creas los vectores y y z con los números que especificaste.

plot(w, y): Genera un gráfico de dispersión (un gráfico de puntos). Coloca los valores del vector w en el eje X (horizontal) y los valores del vector y en el eje Y (vertical).

4.5 personalizar un grafico

plot(w,y,"b", cex=2,lty=3,col="darkred")

plot(w, y, …): La función base es la misma, pero ahora le agregas opciones:

“b”: Indica el tipo (type) de gráfico. “b” significa que quieres mostrar ambos (both) puntos y líneas que los conectan.

cex = 2: cex significa “expansión de caracter”. Un valor de 2 hace que los puntos del gráfico sean el doble de grandes que su tamaño normal.

lty = 3: lty significa “tipo de línea” (line type). El 3 corresponde a una línea punteada.

col = “darkred”: col establece el color del gráfico. En este caso, rojo oscuro. ## histograma

hist(chickwts$weight)

hist(chickwts\(weight): La función hist() crea un histograma. Este gráfico muestra la frecuencia con la que aparecen los valores de peso (chickwts\)weight) en diferentes rangos. Es muy útil para entender cómo se distribuyen los datos.

4.6 personalización de histograma

hist(chickwts$weight,main = "chickens' weight",xlab = "frequency", col="lightgreen",border = "black")

hist(chickwts$weight, …): De nuevo, usas argumentos para personalizar:

main = “chickens’ weight”: Añade un título principal al gráfico.

xlab = “frequency”: Pone una etiqueta en el eje X (horizontal). Nota: Generalmente en un histograma, el eje X representa la variable (en este caso, “weight”) y el eje Y la frecuencia. Tu código etiqueta el eje X como “frequency”.

col = “lightgreen”: Rellena las barras del histograma con color verde claro.

border = “black”: Pinta el borde de las barras de color negro.

4.7 Gráfico de Cajas (Boxplot)

boxplot(w,y,z)

boxplot(w, y, z): Crea un diagrama de caja para cada uno de los vectores que le pasas (w, y, y z). Los muestra uno al lado del otro, lo que facilita la comparación de su distribución, mediana y rangos.

4.8 Lectura de Archivos Externos

library(readxl)
#Sales <- read_excel("Sales.xlsx")
#View(Sales)

#mean(Sales$John)

#boxplot(Sales$Jimmy,Sales$Sue,Sales$John,Sales$Sally,Sales$Gilbert)

library(readxl): Carga el paquete readxl. Los paquetes son colecciones de funciones, y este en particular contiene las herramientas para leer archivos de Excel.

Sales <- read_excel(“Sales.xlsx”): Lee el archivo llamado “Sales.xlsx” (que debe estar en tu carpeta de trabajo) y guarda su contenido en una tabla llamada Sales.

mean(Sales$John): Calcula el promedio de la columna llamada John de la tabla Sales.

boxplot(Sales$Jimmy, …): Crea un diagrama de caja para cada una de las columnas de ventas especificadas (Jimmy, Sue, John, etc.) de la tabla Sales. ## correlación

#cor(Sales$Jimmy,Sales$Sue)

cor(Sales\(Jimmy, Sales\)Sue): Calcula el coeficiente de correlación entre las ventas de Jimmy y las de Sue.

Un resultado cercano a 1 indica una correlación positiva fuerte (si las ventas de Jimmy suben, las de Sue también tienden a subir).

Un resultado cercano a -1 indica una correlación negativa fuerte (si las de Jimmy suben, las de Sue tienden a bajar).

Un resultado cercano a 0 indica que no hay una relación lineal clara

4.9 otras bases

install.packages("palmerpenguins")
## Installing package into '/home/chinorrips/R/x86_64-pc-linux-gnu-library/4.2'
## (as 'lib' is unspecified)
install.packages("dplyr")
## Installing package into '/home/chinorrips/R/x86_64-pc-linux-gnu-library/4.2'
## (as 'lib' is unspecified)
library(palmerpenguins)
library(dplyr)

install.packages(“nombre_del_paquete”): Este comando se conecta a internet y descarga e instala un paquete en tu computadora. Solo necesitas hacerlo una vez por paquete.

library(nombre_del_paquete): Este comando carga un paquete que ya está instalado en tu sesión actual de R, para que puedas usar sus funciones y datos. Debes hacerlo cada vez que inicias R y quieres usar ese paquete.

palmerpenguins: Contiene un famoso conjunto de datos sobre pingüinos.

dplyr: Es un paquete extremadamente popular para la manipulación y limpieza de datos.

4.10 ver datos

data("penguins")
View(penguins)
head(penguins)
## # A tibble: 6 × 8
##   species island    bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
##   <fct>   <fct>              <dbl>         <dbl>             <int>       <int>
## 1 Adelie  Torgersen           39.1          18.7               181        3750
## 2 Adelie  Torgersen           39.5          17.4               186        3800
## 3 Adelie  Torgersen           40.3          18                 195        3250
## 4 Adelie  Torgersen           NA            NA                  NA          NA
## 5 Adelie  Torgersen           36.7          19.3               193        3450
## 6 Adelie  Torgersen           39.3          20.6               190        3650
## # ℹ 2 more variables: sex <fct>, year <int>
str(penguins)
## tibble [344 × 8] (S3: tbl_df/tbl/data.frame)
##  $ species          : Factor w/ 3 levels "Adelie","Chinstrap",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ island           : Factor w/ 3 levels "Biscoe","Dream",..: 3 3 3 3 3 3 3 3 3 3 ...
##  $ bill_length_mm   : num [1:344] 39.1 39.5 40.3 NA 36.7 39.3 38.9 39.2 34.1 42 ...
##  $ bill_depth_mm    : num [1:344] 18.7 17.4 18 NA 19.3 20.6 17.8 19.6 18.1 20.2 ...
##  $ flipper_length_mm: int [1:344] 181 186 195 NA 193 190 181 195 193 190 ...
##  $ body_mass_g      : int [1:344] 3750 3800 3250 NA 3450 3650 3625 4675 3475 4250 ...
##  $ sex              : Factor w/ 2 levels "female","male": 2 1 1 NA 1 2 1 2 NA NA ...
##  $ year             : int [1:344] 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 ...
summary(penguins)
##       species          island    bill_length_mm  bill_depth_mm  
##  Adelie   :152   Biscoe   :168   Min.   :32.10   Min.   :13.10  
##  Chinstrap: 68   Dream    :124   1st Qu.:39.23   1st Qu.:15.60  
##  Gentoo   :124   Torgersen: 52   Median :44.45   Median :17.30  
##                                  Mean   :43.92   Mean   :17.15  
##                                  3rd Qu.:48.50   3rd Qu.:18.70  
##                                  Max.   :59.60   Max.   :21.50  
##                                  NA's   :2       NA's   :2      
##  flipper_length_mm  body_mass_g       sex           year     
##  Min.   :172.0     Min.   :2700   female:165   Min.   :2007  
##  1st Qu.:190.0     1st Qu.:3550   male  :168   1st Qu.:2007  
##  Median :197.0     Median :4050   NA's  : 11   Median :2008  
##  Mean   :200.9     Mean   :4202                Mean   :2008  
##  3rd Qu.:213.0     3rd Qu.:4750                3rd Qu.:2009  
##  Max.   :231.0     Max.   :6300                Max.   :2009  
##  NA's   :2         NA's   :2

data(“penguins”): Carga el set de datos penguins del paquete palmerpenguins.

View(penguins): Abre la tabla completa de los pingüinos en una nueva pestaña (similar a una hoja de cálculo).

head(penguins): Muestra las primeras 6 filas del conjunto de datos. Es una forma rápida de ver cómo lucen los datos sin tener que ver la tabla entera.

str(penguins): Muestra la estructura (structure) del data frame. Te dice cuántas observaciones (filas) y variables (columnas) hay, y qué tipo de dato es cada columna (int para enteros, num para números con decimales, Factor para categorías como “male” o “female”).

summary(penguins): Genera un resumen estadístico para cada columna. Para columnas numéricas, te da el mínimo, máximo, media, mediana y cuartiles. Para columnas categóricas (Factor), te cuenta cuántas veces aparece cada categoría. ## revisión de tipo de variables

str(penguins)
## tibble [344 × 8] (S3: tbl_df/tbl/data.frame)
##  $ species          : Factor w/ 3 levels "Adelie","Chinstrap",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ island           : Factor w/ 3 levels "Biscoe","Dream",..: 3 3 3 3 3 3 3 3 3 3 ...
##  $ bill_length_mm   : num [1:344] 39.1 39.5 40.3 NA 36.7 39.3 38.9 39.2 34.1 42 ...
##  $ bill_depth_mm    : num [1:344] 18.7 17.4 18 NA 19.3 20.6 17.8 19.6 18.1 20.2 ...
##  $ flipper_length_mm: int [1:344] 181 186 195 NA 193 190 181 195 193 190 ...
##  $ body_mass_g      : int [1:344] 3750 3800 3250 NA 3450 3650 3625 4675 3475 4250 ...
##  $ sex              : Factor w/ 2 levels "female","male": 2 1 1 NA 1 2 1 2 NA NA ...
##  $ year             : int [1:344] 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 ...

str(penguins): Es la misma función de antes, útil para recordar los tipos de datos.

as.numeric(penguins$sex): Es un comentario que sirve como ejemplo. Las funciones que empiezan con as. (como as.numeric(), as.character(), as.factor()) se usan para convertir una columna de un tipo a otro. En este ejemplo, se muestra cómo se intentaría convertir la columna sex a un formato numérico (aunque no se ejecuta por el #). ## cambiar a otra tipo de variable

# as.numeric(penguins$sex)
summary(penguins)
##       species          island    bill_length_mm  bill_depth_mm  
##  Adelie   :152   Biscoe   :168   Min.   :32.10   Min.   :13.10  
##  Chinstrap: 68   Dream    :124   1st Qu.:39.23   1st Qu.:15.60  
##  Gentoo   :124   Torgersen: 52   Median :44.45   Median :17.30  
##                                  Mean   :43.92   Mean   :17.15  
##                                  3rd Qu.:48.50   3rd Qu.:18.70  
##                                  Max.   :59.60   Max.   :21.50  
##                                  NA's   :2       NA's   :2      
##  flipper_length_mm  body_mass_g       sex           year     
##  Min.   :172.0     Min.   :2700   female:165   Min.   :2007  
##  1st Qu.:190.0     1st Qu.:3550   male  :168   1st Qu.:2007  
##  Median :197.0     Median :4050   NA's  : 11   Median :2008  
##  Mean   :200.9     Mean   :4202                Mean   :2008  
##  3rd Qu.:213.0     3rd Qu.:4750                3rd Qu.:2009  
##  Max.   :231.0     Max.   :6300                Max.   :2009  
##  NA's   :2         NA's   :2

4.11 Selección de Columnas y Creación de un Nuevo Data Frame

ancho<-(penguins$bill_depth_mm)
largo<-(penguins$bill_length_mm)


anchoylargo<-data.frame(ancho,largo)

ancho <- (penguins$bill_depth_mm): Selecciona la columna bill_depth_mm (profundidad del pico) de la tabla penguins y la guarda en un nuevo vector llamado ancho.

largo <- (penguins$bill_length_mm): Hace lo mismo con la columna bill_length_mm (largo del pico) y la guarda en el vector largo.

anchoylargo <- data.frame(ancho, largo): Crea una nueva tabla (un data frame) llamada anchoylargo que contiene únicamente las dos columnas que acabas de crear.

4.12 Prueba de Correlación Formal

A diferencia de cor(), que solo da el número, cor.test() realiza una prueba estadística completa.

cor.test(ancho,largo)
## 
##  Pearson's product-moment correlation
## 
## data:  ancho and largo
## t = -4.4591, df = 340, p-value = 1.12e-05
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.3328072 -0.1323004
## sample estimates:
##        cor 
## -0.2350529

cor.test(ancho, largo): Realiza una prueba de correlación entre las variables ancho y largo. El resultado te dará no solo el coeficiente de correlación, sino también información importante como el p-value, que te ayuda a determinar si la correlación observada es estadísticamente significativa. ## Creación de una Nueva Variable (Columna)

penguins$BMI <- penguins$body_mass_g/penguins$flipper_length_mm*10

penguins$BMI <- …: Esta sintaxis crea una nueva columna llamada BMI dentro de la tabla penguins.

penguins\(body_mass_g / penguins\)flipper_length_mm * 10: Esta es la operación que se realiza para cada fila. Divide la masa corporal (body_mass_g) entre la longitud de la aleta (flipper_length_mm) y multiplica el resultado por 10 para calcular el valor de la nueva columna BMI.

4.13 Contar Filas con Datos Faltantes

Los datos del mundo real a menudo están incompletos. Este código es una forma muy eficiente de saber cuántas filas tienen al menos un valor NA (dato faltante).

sum(!complete.cases(penguins))
## [1] 11

complete.cases(penguins): Esta función revisa cada fila de la tabla penguins. Devuelve TRUE si la fila está completa (sin NA) y FALSE si tiene al menos un NA.

!: El signo de exclamación es un operador de negación. Invierte los TRUE y FALSE. Así, !complete.cases(penguins) devuelve TRUE para las filas incompletas (las que tienen NA).

sum(…): R trata TRUE como el número 1 y FALSE como el 0. Al sumar esta lista de TRUE y FALSE, el resultado es simplemente el conteo total de filas que tienen datos faltantes.

4.14 Crear una Nueva Base de Datos Limpia

El paso final y muy común es crear una nueva versión de tu tabla eliminando todas las filas que tenían datos faltantes.

penguins_clean<-penguins[complete.cases(penguins),]

penguins[…]: De nuevo, usamos los corchetes para filtrar la tabla penguins.

complete.cases(penguins): Como antes, esto genera la lista de TRUE para las filas completas y FALSE para las incompletas.

penguins[…, ]: Al poner esa lista antes de la coma, le dices a R: “Quédate solo con las filas donde el resultado fue TRUE”. La coma al final significa “y para esas filas, quédate con todas las columnas”.

penguins_clean <- …: El resultado, que es la tabla penguins sin ninguna fila que contenga NA, se guarda en un nuevo objeto llamado penguins_clean.