Dataframe

1. Creación de dataframe

Creación de un dataframe a partir de vectores.

# Creacion de vectores
v1 <- c("Ana", "Beatriz", "Carmen", "Diana", "Elena",
        "Fabiana", "Gabriela", "Helga", "Ingrid", "Jacinta")
v2 <- c(22, 26, 20, 23, 19, 24, 22, 25, 20, 28)
v3 <- c(1.64, 1.65, 1.61, 1.66, 1.59, 1.67, 1.72, 1.68, 1.62, 1.70)
v4 <- c(F, F, T, F, T, T, F, F, T, F)
# Creacion de dataframe
df <- data.frame(Nombres = v1,
                 Edad = v2,
                 Estatura = v3,
                 Soltera = v4)
head(df, n=3)
  Nombres Edad Estatura Soltera
1     Ana   22     1.64   FALSE
2 Beatriz   26     1.65   FALSE
3  Carmen   20     1.61    TRUE
class(df)
[1] "data.frame"

2. Selección de elementos

a. Seleccionar filas

Seleccionar 1 fila

df[2, ]
  Nombres Edad Estatura Soltera
2 Beatriz   26     1.65   FALSE

Seleccionar varias filas consecutivas

df[3:5, ]
  Nombres Edad Estatura Soltera
3  Carmen   20     1.61    TRUE
4   Diana   23     1.66   FALSE
5   Elena   19     1.59    TRUE

Seleccionar filas intercaladas

df[c(3,7,10,5), ]
    Nombres Edad Estatura Soltera
3    Carmen   20     1.61    TRUE
7  Gabriela   22     1.72   FALSE
10  Jacinta   28     1.70   FALSE
5     Elena   19     1.59    TRUE

b. Seleccionar columnas

Seleccionar 1 columna

col1 <- df[2]
head(col1, n=3)
  Edad
1   22
2   26
3   20

Seleccionar las primeras N filas

# Seleccionar las primeras 3 filas
head(df, n=3)
  Nombres Edad Estatura Soltera
1     Ana   22     1.64   FALSE
2 Beatriz   26     1.65   FALSE
3  Carmen   20     1.61    TRUE

Seleccionar las últimas N filas

# Seleccionar las ultimas  3 filas
tail(df, n=3)
   Nombres Edad Estatura Soltera
8    Helga   25     1.68   FALSE
9   Ingrid   20     1.62    TRUE
10 Jacinta   28     1.70   FALSE

Seleccionar varias columnas consecutivas

col2 <- df[2:4]
head(col2, n=3)
  Edad Estatura Soltera
1   22     1.64   FALSE
2   26     1.65   FALSE
3   20     1.61    TRUE

Seleccionar columnas intercaladas

col3 <- df[c(3,2,1)]
head(col3, n=3)
  Estatura Edad Nombres
1     1.64   22     Ana
2     1.65   26 Beatriz
3     1.61   20  Carmen

Seleccionar todas las columnas excepto un grupo determinado

# Todas las columnas menos la columna 3 y 4
col4 <- df[-c(3,4)]
head(col4, n=3)
  Nombres Edad
1     Ana   22
2 Beatriz   26
3  Carmen   20

Seleccionar filas y columnas

# Filas 4 a la 7 / Columnas 1, 2 y 4
col5 <- df[c(4:7),c(1,2,4)]
col5
   Nombres Edad Soltera
4    Diana   23   FALSE
5    Elena   19    TRUE
6  Fabiana   24    TRUE
7 Gabriela   22   FALSE

3. Extracción de información

Número de columnas

ncol(df)
[1] 4

Número de filas

nrow(df)
[1] 10

Dimension: Filas - Columnas

dim(df)
[1] 10  4

Nombres de las columnas

colnames(df)
[1] "Nombres"  "Edad"     "Estatura" "Soltera" 

Nombres de las filas

head(rownames(df), n=5)
[1] "1" "2" "3" "4" "5"

Resumen estadístico

summary(df)
   Nombres               Edad          Estatura      Soltera       
 Length:10          Min.   :19.00   Min.   :1.590   Mode :logical  
 Class :character   1st Qu.:20.50   1st Qu.:1.625   FALSE:6        
 Mode  :character   Median :22.50   Median :1.655   TRUE :4        
                    Mean   :22.90   Mean   :1.654                  
                    3rd Qu.:24.75   3rd Qu.:1.677                  
                    Max.   :28.00   Max.   :1.720                  

4. Modificacion de filas y columnas

df
    Nombres Edad Estatura Soltera
1       Ana   22     1.64   FALSE
2   Beatriz   26     1.65   FALSE
3    Carmen   20     1.61    TRUE
4     Diana   23     1.66   FALSE
5     Elena   19     1.59    TRUE
6   Fabiana   24     1.67    TRUE
7  Gabriela   22     1.72   FALSE
8     Helga   25     1.68   FALSE
9    Ingrid   20     1.62    TRUE
10  Jacinta   28     1.70   FALSE

a. Agregar columnas

Agregar una nueva columna al final

# Nueva columna
v5 <- c(62.4, 58.9, 59.2, 65.4, 67.6, 64.3, 66.2, 65.4, 63.7, 69.5)
df$Peso <- v5
head(df, n=3)
  Nombres Edad Estatura Soltera Peso
1     Ana   22     1.64   FALSE 62.4
2 Beatriz   26     1.65   FALSE 58.9
3  Carmen   20     1.61    TRUE 59.2

b. Cambiar posiciones de las columnas

df <- df[c(1,5,2,3,4)]
head(df, n=3)
  Nombres Peso Edad Estatura Soltera
1     Ana 62.4   22     1.64   FALSE
2 Beatriz 58.9   26     1.65   FALSE
3  Carmen 59.2   20     1.61    TRUE

c. Eliminar columnas

# Eliminar columna 2 y 4
df <- df[-c(2,4)]
head(df, n=3)
  Nombres Edad Soltera
1     Ana   22   FALSE
2 Beatriz   26   FALSE
3  Carmen   20    TRUE

d. Agregar filas

# Nueva fila
fila <- list("Karen", 25, TRUE)
df <- rbind(df, fila)
tail(df, n=3)
   Nombres Edad Soltera
9   Ingrid   20    TRUE
10 Jacinta   28   FALSE
11   Karen   25    TRUE

e. Cambiar posición de filas

df <- df[c(5,4,3,2,1),]
df
  Nombres Edad Soltera
5   Elena   19    TRUE
4   Diana   23   FALSE
3  Carmen   20    TRUE
2 Beatriz   26   FALSE
1     Ana   22   FALSE

f. Eliminar filas

# Eliminar fila 2 y 5
df <- df[-c(2,5),]
df
  Nombres Edad Soltera
5   Elena   19    TRUE
3  Carmen   20    TRUE
2 Beatriz   26   FALSE

5. Modificación de valores

Modificar los valores de una columna

# Modificar los valores de la columna EDAD
df$edad <- c(23,28,24)
df
  Nombres Edad Soltera edad
5   Elena   19    TRUE   23
3  Carmen   20    TRUE   28
2 Beatriz   26   FALSE   24

Modificar los valores de una fila

# Modificar los valores de la fila 2
df[2,] <- list("Clara", 22, FALSE)
df
  Nombres Edad Soltera  edad
5   Elena   19    TRUE    23
3   Clara   22   FALSE Clara
2 Beatriz   26   FALSE    24

Modificar los valores de una celda

# Modificar la fila 3 y columna 1
df[3,1] <- "Blanca"
df
  Nombres Edad Soltera  edad
5   Elena   19    TRUE    23
3   Clara   22   FALSE Clara
2  Blanca   26   FALSE    24

6. Dataset

a. Importar datasets bases de R

En R existen un conjunto de pequeños datasets que pueden ser usados para practicar. Por ejemplo tenemos:

  • iris
  • mtcars
  • USArrests
  • CO2
  • quakes
head(iris, n=3)
  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
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  
                
                
                

b. Crear dataset aleatorio

Importación de libreria

library(MASS)

Crear dos variables correlacionadas con el paquete MASS

col_corr <- mvrnorm(n = 50,
                    mu = c(20, 20),
                    Sigma = matrix(c(1, 0.4, 0.4, 1), 2, 2))
df_corr <- round(data.frame(col_corr), 1)
names(df_corr) <- c("col1", "col2")

Crear variables aleatorias de tipo numérico y categórico.

clase1 <- c("Tipo 1", "Tipo 2", "Tipo 3")
clase2 <- c("Clase A", "Clase B", "Clase C", "Clase D")

col3 <- round(seq(50)/10 + rnorm(50, mean = 18, sd = 0.2),1)
col4 <- seq(from = 1976, to = 2025)
col5 <- sample(clase1, size=50, replace= TRUE, prob= NULL)
col6 <- sample(clase2, size=50, replace= TRUE, prob= NULL)

Crear el dataset completo

df_random <- data.frame(df_corr, col3, col4, col5, col6)
head(df_random, n=5)
  col1 col2 col3 col4   col5    col6
1 18.5 17.7 18.2 1976 Tipo 3 Clase C
2 20.2 19.8 17.9 1977 Tipo 1 Clase C
3 19.5 20.2 18.0 1978 Tipo 1 Clase B
4 20.9 18.9 18.5 1979 Tipo 2 Clase D
5 17.5 17.2 18.5 1980 Tipo 3 Clase A

Exportar dataset

write.csv(x = df_random,
          file = 'df_random.csv',
          row.names = FALSE)
Back to top