Protocolo:

1 ¿Que es un Data Frames?

Un Data Frame es una lista de vectores de igual longitud. Una matriz sólo contiene un tipo de datos, mientras que un Data Frame acepta diferentes tipos de datos (numéricos, de caracteres, de factores, etc.).

2 Cómo crear un Data Frame

Podemos crear un Data Frame en R pasando la variables x,y,z,w a la función data.frame(). Podemos crear un Data Frame y nombrar las columnas con name() o simplemente especificar el nombre de las variables.

2.1 Sintaxis:

Argumentos:

  • df: Puede ser una matriz para convertir como Data Frame o una colección de variables unidos.

  • stringsAsFactors: Convierte strings a factors por defecto.

2.2 Ejemplo:

# Vamos a crear vectores de la misma longitud con diferentes datos:
message("\n# Vamos a crear vectores de la misma longitud con diferentes datos:")
## 
## # Vamos a crear vectores de la misma longitud con diferentes datos:
## Creamos las variables x,y,z,w:
cat("\n## Creamos las variables x,y,z,w:")
## 
## ## Creamos las variables x,y,z,w:
x <- c(1,2,3,4)
y <- c("Nezuko", "Kimetsu", "Katana", "Midoriya")
z <- c(T, F, F, F)
w <- c(12.12,75.32,3.14,2.71)
cat("\n> x:", x, "\n> y:", y, "\n> z:", z, "\n> w:", w)
## 
## > x: 1 2 3 4 
## > y: Nezuko Kimetsu Katana Midoriya 
## > z: TRUE FALSE FALSE FALSE 
## > w: 12.12 75.32 3.14 2.71
## Unoir las variables para crear un dataframe:
message("\n## Unoir las variables para crear un dataframe:")
## 
## ## Unoir las variables para crear un dataframe:
df <- data.frame(x,y,z,w)
cat("\ndf <- data.frame(x,y,z,w)", "\n \nOUTPUT:\n \n")
## 
## df <- data.frame(x,y,z,w) 
##  
## OUTPUT:
## 
print(df)
##   x        y     z     w
## 1 1   Nezuko  TRUE 12.12
## 2 2  Kimetsu FALSE 75.32
## 3 3   Katana FALSE  3.14
## 4 4 Midoriya FALSE  2.71

Podemos ver que los encabezados de las columnas tienen el mismo nombre que las variables. Podemos cambiar el nombre de las columnas en R con la función names().

# Nombrando el data frame:
message("\n# Nombrando el data frame:")
## 
## # Nombrando el data frame:
names(df) <- c("N°", "Anime", "Logical", "XP")

print(df)
##   N°    Anime Logical    XP
## 1  1   Nezuko    TRUE 12.12
## 2  2  Kimetsu   FALSE 75.32
## 3  3   Katana   FALSE  3.14
## 4  4 Midoriya   FALSE  2.71
# Ahora Observemos su estructura con str():
cat("\n# Ahora Observemos su estructura con str():")
## 
## # Ahora Observemos su estructura con str():
str(df)
## 'data.frame':    4 obs. of  4 variables:
##  $ N°     : num  1 2 3 4
##  $ Anime  : chr  "Nezuko" "Kimetsu" "Katana" "Midoriya"
##  $ Logical: logi  TRUE FALSE FALSE FALSE
##  $ XP     : num  12.12 75.32 3.14 2.71

Nota: De forma predeterminada, el Data Frame devuelve variables string como factor.

3 ¿Cómo acceder a los componentes de un Data Frame?

Los componentes de un Data Frame pueden ser accedidos como una lista o como una matriz.

3.1 Accediendo como una lista

Podemos utilizar los operadores [, [[ o $ para acceder a las columnas del Data Frame.

# Acceder a los elemnetos como lista diferentes maneras:
message("\n# Acceder a los elemnetos como lista diferentes maneras:")
## 
## # Acceder a los elemnetos como lista diferentes maneras:
cat("\n> df[\"Anime\"]", "\n \nOUTPUT:\n \n")
## 
## > df["Anime"] 
##  
## OUTPUT:
## 
print(df["Anime"])
##      Anime
## 1   Nezuko
## 2  Kimetsu
## 3   Katana
## 4 Midoriya
cat("\n> df$Anime", "\n \nOUTPUT:\n \n")
## 
## > df$Anime 
##  
## OUTPUT:
## 
print(df$Anime)
## [1] "Nezuko"   "Kimetsu"  "Katana"   "Midoriya"
cat("\n> df[[\"Anime\"]]", "\n \nOUTPUT:\n \n")
## 
## > df[["Anime"]] 
##  
## OUTPUT:
## 
print(df[["Anime"]])
## [1] "Nezuko"   "Kimetsu"  "Katana"   "Midoriya"
cat("\n> df[[2]]", "\n \nOUTPUT:\n \n")
## 
## > df[[2]] 
##  
## OUTPUT:
## 
print(df[[2]])
## [1] "Nezuko"   "Kimetsu"  "Katana"   "Midoriya"

Nota: El acceso con [[ o $ es similar. Sin embargo, difiere para [ en que, la indexación con [ nos devolverá un Data Frame pero las otras dos lo reducirán a un vector.

3.2 Accediendo como una matriz

Se puede acceder a los Data Frame como a una matriz proporcionando un índice para la fila y la columna.

Para ilustrar esto, utilizamos conjuntos de datos ya disponibles en R. Los conjuntos de datos disponibles pueden listarse con el comando library(help = "datasets").

Utilizaremos el conjunto de datos de árboles que contiene la circunferencia, la altura y el volumen de los cerezos negros.

Un Data Frame puede ser examinado usando funciones como str() y head().

Nota: df[Fila, Columna]

# Veamosla comparación:
message("\n# Veamosla comparación:")
## 
## # Veamosla comparación:
cat("\n> str(df)","\n \nOUTPUT:\n \n")
## 
## > str(df) 
##  
## OUTPUT:
## 
print(str(df))
## 'data.frame':    4 obs. of  4 variables:
##  $ N°     : num  1 2 3 4
##  $ Anime  : chr  "Nezuko" "Kimetsu" "Katana" "Midoriya"
##  $ Logical: logi  TRUE FALSE FALSE FALSE
##  $ XP     : num  12.12 75.32 3.14 2.71
## NULL
cat("\n> head(df)","\n \nOUTPUT:\n \n")
## 
## > head(df) 
##  
## OUTPUT:
## 
print(head(df))
##   N°    Anime Logical    XP
## 1  1   Nezuko    TRUE 12.12
## 2  2  Kimetsu   FALSE 75.32
## 3  3   Katana   FALSE  3.14
## 4  4 Midoriya   FALSE  2.71
# Selenccionando la 2da y 3ra fila:
cat("\n# Selenccionando la 2da y 3ra fila:")
## 
## # Selenccionando la 2da y 3ra fila:
cat("\n> df[2:3,","\n \nOUTPUT:\n \n")
## 
## > df[2:3, 
##  
## OUTPUT:
## 
print(df[2:3,])
##   N°   Anime Logical    XP
## 2  2 Kimetsu   FALSE 75.32
## 3  3  Katana   FALSE  3.14
# oxdenar por operadores lógicos:
message("\n# ordenar por operadores lógicos:")
## 
## # ordenar por operadores lógicos:
cat("\n> df[df <30]","\n \nOUTPUT:\n \n")
## 
## > df[df <30] 
##  
## OUTPUT:
## 
df[df <30]
##  [1] "1"     "2"     "3"     "4"     "TRUE"  "FALSE" "FALSE" "FALSE" "12.12"
## [10] " 3.14" " 2.71"

Podemos ver en el último caso que el tipo retornado es un vector que extraeremos los datos de una sola columna.

# Llamar a los elementos del data frame:
message("\n# Llamar a los elementos del data frame:")
## 
## # Llamar a los elementos del data frame:
print("Se ve como dataframe no como vector")
## [1] "Se ve como dataframe no como vector"
cat("\n> df[2:4, 4, drop = F]","\n \nOUTPUT:\n \n")
## 
## > df[2:4, 4, drop = F] 
##  
## OUTPUT:
## 
print(df[2:4, 4, drop = F])
##      XP
## 2 75.32
## 3  3.14
## 4  2.71

4 ¿Cómo modificar un Data Frame?

Los Data Frame pueden ser modificados como modificamos las matrices a través de la reasignación.

# Observamos nuestro data frame:
print(df)
##   N°    Anime Logical    XP
## 1  1   Nezuko    TRUE 12.12
## 2  2  Kimetsu   FALSE 75.32
## 3  3   Katana   FALSE  3.14
## 4  4 Midoriya   FALSE  2.71
## Ahora observamos nuestro renombramiento:
cat("\n> df[3, \"Anime\"] <- \"Tanjiro\"","\n \nOUTPUT:\n \n")
## 
## > df[3, "Anime"] <- "Tanjiro" 
##  
## OUTPUT:
## 
df[3, "Anime"] <- "Tanjiro"
print(df[3, "Anime", drop=F])
##     Anime
## 3 Tanjiro
print(df)
##   N°    Anime Logical    XP
## 1  1   Nezuko    TRUE 12.12
## 2  2  Kimetsu   FALSE 75.32
## 3  3  Tanjiro   FALSE  3.14
## 4  4 Midoriya   FALSE  2.71

4.1 Añadir componentes

Se pueden añadir filas a un Data Frame utilizando la función rbind().

# Añandiendo componentes con rbind():
cat("\n# Añandiendo componentes con rbind():")
## 
## # Añandiendo componentes con rbind():
cat("\n> rbind(df, list(5, \"OneForAll\", T, 9999.99))","\n \nOUTPUT:\n \n")
## 
## > rbind(df, list(5, "OneForAll", T, 9999.99)) 
##  
## OUTPUT:
## 
df <- rbind(df, list(5, "OneForAll", T, 9999.99))
print("Se añaden en orden de Fila")
## [1] "Se añaden en orden de Fila"
print(df)
##   N°     Anime Logical      XP
## 1  1    Nezuko    TRUE   12.12
## 2  2   Kimetsu   FALSE   75.32
## 3  3   Tanjiro   FALSE    3.14
## 4  4  Midoriya   FALSE    2.71
## 5  5 OneForAll    TRUE 9999.99

Simalarmente podemos añadir columnas con cbind()

# Añandiendo componentes con cbind():
cat("\n# Añandiendo componentes con cbind():")
## 
## # Añandiendo componentes con cbind():
cat("\n> rbind(df, list(5, \"OneForAll\", T, 9999.99))","\n \nOUTPUT:\n \n")
## 
## > rbind(df, list(5, "OneForAll", T, 9999.99)) 
##  
## OUTPUT:
## 
df <- cbind(df, Clasificación = c("C+",
                            "C++",
                            "A++", "A+", "B+"))
print("Se añaden en orden de Fila")
## [1] "Se añaden en orden de Fila"
print(df)
##   N°     Anime Logical      XP Clasificación
## 1  1    Nezuko    TRUE   12.12            C+
## 2  2   Kimetsu   FALSE   75.32           C++
## 3  3   Tanjiro   FALSE    3.14           A++
## 4  4  Midoriya   FALSE    2.71            A+
## 5  5 OneForAll    TRUE 9999.99            B+

Dado que los Data Frame se implementan como listas, también podemos añadir nuevas columnas mediante simples asignaciones tipo lista.

print(df)
##   N°     Anime Logical      XP Clasificación
## 1  1    Nezuko    TRUE   12.12            C+
## 2  2   Kimetsu   FALSE   75.32           C++
## 3  3   Tanjiro   FALSE    3.14           A++
## 4  4  Midoriya   FALSE    2.71            A+
## 5  5 OneForAll    TRUE 9999.99            B+
# Añadimos una nueva columnas con el operador "$":
message("\n# Añadimos una nueva columnas con el operador \"$\":")
## 
## # Añadimos una nueva columnas con el operador "$":
cat("\n> df$Finalizada <- c(\"Si\", \"Si\", \"NO\", \"NO\", \"NO\")]",
    "\n \nOUTPUT:\n \n")
## 
## > df$Finalizada <- c("Si", "Si", "NO", "NO", "NO")] 
##  
## OUTPUT:
## 
df$Finalizada <- c("SI", "SI", "NO", "NO", "NO")

print(df)
##   N°     Anime Logical      XP Clasificación Finalizada
## 1  1    Nezuko    TRUE   12.12            C+         SI
## 2  2   Kimetsu   FALSE   75.32           C++         SI
## 3  3   Tanjiro   FALSE    3.14           A++         NO
## 4  4  Midoriya   FALSE    2.71            A+         NO
## 5  5 OneForAll    TRUE 9999.99            B+         NO

4.2 Eliminación de un componente

Las columnas del Data Frame se pueden borrar asignándoles NULL.

# Eliminemos del data frame a XP:
cat("\n# Eliminemos del data frame a XP:")
## 
## # Eliminemos del data frame a XP:
print(df)
##   N°     Anime Logical      XP Clasificación Finalizada
## 1  1    Nezuko    TRUE   12.12            C+         SI
## 2  2   Kimetsu   FALSE   75.32           C++         SI
## 3  3   Tanjiro   FALSE    3.14           A++         NO
## 4  4  Midoriya   FALSE    2.71            A+         NO
## 5  5 OneForAll    TRUE 9999.99            B+         NO
cat("\n> df$XP <- NULL","\n \nOUTPUT:\n \n")
## 
## > df$XP <- NULL 
##  
## OUTPUT:
## 
df$XP <- NULL
print(df)
##   N°     Anime Logical Clasificación Finalizada
## 1  1    Nezuko    TRUE            C+         SI
## 2  2   Kimetsu   FALSE           C++         SI
## 3  3   Tanjiro   FALSE           A++         NO
## 4  4  Midoriya   FALSE            A+         NO
## 5  5 OneForAll    TRUE            B+         NO