Ir al contenido principal

Subconjuntos de datos en R

Crear subconjuntos de datos es una habilidad esencial para cualquier profesional de datos. ¡Aprende y practica cómo hacerlo en este tutorial interactivo!
Actualizado 17 sept 2026  · 6 min leer

Explorar con IA

ChatGPTClaudePerplexity

Tanto si estás comparando cómo responden distintos perfiles demográficos a campañas de marketing, como si quieres centrarte en un periodo concreto o extraer información de unos pocos productos del inventario, crear subconjuntos de datos te permite aislar observaciones útiles dentro de tu dataset. R es una gran herramienta que hace que crear subconjuntos sea fácil e intuitivo. Al final de este tutorial, sabrás extraer justo la información que buscas de tu conjunto de datos.

Crear un subconjunto no cambia el contenido de tus datos, simplemente selecciona la parte más relevante para tu objetivo. En general, hay tres maneras de seleccionar filas y columnas en tu dataset—por índice, por nombre y por valor.

Crear subconjuntos de filas y columnas por índice

Una forma de seleccionar filas y columnas es mediante los índices del dataset. Es lo mismo que referirte a tus filas y columnas como "la primera fila", "todas las filas de las columnas segunda y quinta" o "la primera fila de las columnas de la segunda a la quinta". Vamos a expresar estas frases usando un dataset llamado iris en R. Según su documentación, "[e]ste famoso conjunto de datos de iris (de Fisher o Anderson) proporciona las medidas en centímetros de la longitud y anchura del sépalo y la longitud y anchura del pétalo, respectivamente, para 50 flores de cada una de las 3 especies de iris. Las especies son Iris setosa, versicolor y virginica."

# "La primera fila": iris[1, ] # "Todas las filas de las columnas 2 y 5": iris[, c(2, 5)] # "La primera fila de las columnas de la 2 a la 5": iris[1, 2:5]

Para crear un subconjunto, se usan corchetes después del objeto que contiene tus datos. Las filas se indican como el primer elemento dentro de los corchetes y las columnas como el segundo, separados por una coma:

data[rows, columns]

Crear subconjuntos de filas y columnas por nombre

En R, las filas y columnas de tu dataset tienen atributos de nombre. Los nombres de fila se usan poco y por defecto proporcionan índices (enteros desde 1 hasta el número de filas del dataset), justo como has visto en la sección anterior. De hecho, si llamas a rownames() sobre el dataset iris, verás que simplemente están indexados del 1 al 150:

 > rownames(iris)
[1] "1"   "2"   "3"   "4"   "5"   "6"   "7"   "8"   "9"   "10"  "11"  "12"  "13"  "14"
[15] "15"  "16"  "17"  "18"  "19"  "20"  "21"  "22"  "23"  "24"  "25"  "26"  "27"  "28"
[29] "29"  "30"  "31"  "32"  "33"  "34"  "35"  "36"  "37"  "38"  "39"  "40"  "41"  "42"
[43] "43"  "44"  "45"  "46"  "47"  "48"  "49"  "50"  "51"  "52"  "53"  "54"  "55"  "56"
[57] "57"  "58"  "59"  "60"  "61"  "62"  "63"  "64"  "65"  "66"  "67"  "68"  "69"  "70"
[71] "71"  "72"  "73"  "74"  "75"  "76"  "77"  "78"  "79"  "80"  "81"  "82"  "83"  "84"
[85] "85"  "86"  "87"  "88"  "89"  "90"  "91"  "92"  "93"  "94"  "95"  "96"  "97"  "98"
[99] "99"  "100" "101" "102" "103" "104" "105" "106" "107" "108" "109" "110" "111" "112"
[113] "113" "114" "115" "116" "117" "118" "119" "120" "121" "122" "123" "124" "125" "126"
[127] "127" "128" "129" "130" "131" "132" "133" "134" "135" "136" "137" "138" "139" "140"
[141] "141" "142" "143" "144" "145" "146" "147" "148" "149" "150"

> nrow(iris)
[1] 150

Los nombres de fila son más habituales en datasets pequeños y sirven para identificar fácilmente las observaciones. Por ejemplo, en un conjunto de datos reducido con información sanitaria de pacientes de un médico, los nombres de fila podrían ser los nombres completos de los pacientes.

Los nombres de columna, en cambio, están presentes en prácticamente cualquier dataset. Puedes acceder a ellos con la función colnames() o con names():

colnames(iris)
[1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species"     

names(iris)
[1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species"

Para crear un subconjunto por los nombres de filas y columnas, usa de nuevo los corchetes, precedidos por el objeto del dataset:

# Ancho del sépalo de la quinta observación iris["5", "Sepal.Width"] # Ancho del sépalo y ancho del pétalo iris[, c("Sepal.Width", "Petal.Width")]

Es importante tener en cuenta que tanto los nombres de fila como los de columna son caracteres, así que es imprescindible usar comillas simples o dobles.

Crear subconjuntos de filas y columnas por valor

Seleccionar filas y columnas por valor suele ser lo más flexible. Por ejemplo, puedes extraer los datos de Iris setosa usando una condición como esta:

> iris[iris$Species == "setosa", ]
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
4           4.6         3.1          1.5         0.2  setosa

...

47          5.1         3.8          1.6         0.2  setosa
48          4.6         3.2          1.4         0.2  setosa
49          5.3         3.7          1.5         0.2  setosa
50          5.0         3.3          1.4         0.2  setosa

Las expresiones condicionales como iris$Species == "setosa" van en el elemento de filas dentro de los corchetes (es decir, el primer elemento antes de la coma). Además de la condición en el primer elemento, puedes indicar las columnas por índice o por nombre en el segundo. En la consola de abajo, prueba a seleccionar solo las medidas del sépalo de Iris setosa:

# Imprime las medidas del sépalo para setosa # Imprime las medidas del sépalo para setosa (por nombre) iris[iris$Species == "setosa", c("Sepal.Length", "Sepal.Width")] # Imprime las medidas del sépalo para setosa (por índice) iris[iris$Species == "setosa", 1:2] test_or( test_output_contains('iris[iris$Species == "setosa", c("Sepal.Length", "Sepal.Width")]', incorrect_msg = "Selecciona solo las columnas Sepal.Length y Sepal.Width para setosa, por nombre o por índice."), test_output_contains('iris[iris$Species == "setosa", c("Sepal.Width", "Sepal.Length")]', incorrect_msg = "Selecciona solo las columnas Sepal.Length y Sepal.Width para setosa, por nombre o por índice.")) success_msg("¡Buen trabajo!")

Resumen

En este tutorial:

  • Has aprendido a crear subconjuntos de tu data frame por índice. Las filas y columnas se indexan con enteros desde 1 hasta el número de filas y columnas, respectivamente.
  • Has aprendido a crear subconjuntos por nombre. Has visto que los nombres de fila rara vez se especifican y que los nombres de columna son de tipo carácter.
  • Has aprendido a usar condiciones en el elemento de filas dentro de corchetes para crear subconjuntos por valor.
  • Has aprendido a combinar estos métodos para lograr una selección más flexible (por ejemplo, usando condiciones para las filas y seleccionando por índice o nombre para las columnas).

A continuación, encontrarás unos ejercicios para reforzar lo aprendido. La práctica hace al maestro, ¡así que anímate a intentarlos!

Ejercicios prácticos

Selecciona todas las observaciones en las que el ancho del sépalo sea mayor que la longitud del pétalo.

# ¿Qué observaciones tienen mayor ancho de sépalo que longitud de pétalo? # ¿Qué observaciones tienen mayor ancho de sépalo que longitud de pétalo? iris[iris$Sepal.Width > iris$Petal.Length, ] test_output_contains('iris[iris$Sepal.Width > iris$Petal.Length, ]', incorrect_msg = paste("Selecciona las observaciones en las que los valores de Sepal.Width", "sean mayores que los valores de Petal.Length.")) success_msg("¡Bien! Resulta que solo Iris setosa tiene esta forma.")
Usa iris$Sepal.Width > iris$Petal.Length dentro de los corchetes. ¡No olvides la coma!

Selecciona todas las Iris versicolor cuyo ancho del sépalo sea mayor que el ancho medio del sépalo entre todas las especies.

# Guarda los datos de versicolor en un objeto llamado versicolor # Selecciona todas las Iris versicolor con un ancho de sépalo superior a la media # Guarda los datos de versicolor en un objeto llamado versicolor versicolor <- iris[iris$Species == "versicolor", ] # Selecciona todas las Iris versicolor con un ancho de sépalo superior a la media versicolor[versicolor$Sepal.Width > mean(iris$Sepal.Width), ] test_object('versicolor', undefined_msg = "¿Has definido el objeto versicolor?", incorrect_msg = paste("Selecciona donde Species sea igual a \"versicolor\".", "¡Recuerda usar el operador ==!")) test_output_contains('versicolor[versicolor$Sepal.Width > mean(iris$Sepal.Width), ]', incorrect_msg = paste("¡Casi! ¿Estás usando la función mean()", "para calcular el ancho medio del sépalo en todas las especies", "y no solo en Iris versicolor?")) success_msg("¡Gran trabajo!")
Usa la función mean() para calcular el ancho medio del sépalo en iris y luego una condición, prefijada por versicolor, para quedarte solo con los valores por encima de la media.

Indica el ancho medio del sépalo para todas las Iris virginica que tengan longitudes de pétalo menores de 5 centímetros.

# ¡Puedes abordar este problema como prefieras! # Guarda los datos de virginica en un objeto llamado virginica virginica <- iris[iris$Species == "virginica", ] # Ancho medio del sépalo para Iris virginica con longitudes de pétalo menores de 5 mean(virginica[virginica$Petal.Length < 5, ]$Sepal.Width) test_output_contains('2.8', incorrect_msg = "¡Incorrecto! ¡Este es difícil!") success_msg("¡Excelente!")
Primero, crea un subconjunto con todas las Iris virginica y luego con aquellas donde Petal.Length sea menor que 5. Puedes obtener la media con la función mean().

¿Quieres aprender más formas de extraer insights de tus datos? Echa un vistazo a estos cursos en DataCamp.

Revisa también nuestro tutorial Merging Datasets in R.

Tanto si estás comparando cómo responden distintos perfiles demográficos a campañas de marketing, como si quieres centrarte en un periodo concreto o extraer información de unos pocos productos del inventario, crear subconjuntos de datos te permite aislar observaciones útiles dentro de tu dataset. R es una gran herramienta que hace que crear subconjuntos sea fácil e intuitivo. Al final de este tutorial, sabrás extraer justo la información que buscas de tu conjunto de datos.

Crear un subconjunto no cambia el contenido de tus datos, simplemente selecciona la parte más relevante para tu objetivo. En general, hay tres maneras de seleccionar filas y columnas en tu dataset: por índice, por nombre y por valor.

Crear subconjuntos de filas y columnas por índice

Una forma de seleccionar filas y columnas es mediante los índices del dataset. Es lo mismo que referirte a tus filas y columnas como "la primera fila", "todas las filas de las columnas segunda y quinta" o "la primera fila de las columnas de la segunda a la quinta". Vamos a expresar estas frases usando un dataset llamado iris en R. Según su documentación, "[e]ste famoso conjunto de datos de iris (de Fisher o Anderson) proporciona las medidas en centímetros de la longitud y anchura del sépalo y la longitud y anchura del pétalo, respectivamente, para 50 flores de cada una de las 3 especies de iris. Las especies son Iris setosa, versicolor y virginica."

# "La primera fila": iris[1, ] # "Todas las filas de las columnas 2 y 5": iris[, c(2, 5)] # "La primera fila de las columnas de la 2 a la 5": iris[1, 2:5]

Para crear un subconjunto, se usan corchetes después del objeto que contiene tus datos. Las filas se indican como el primer elemento dentro de los corchetes y las columnas como el segundo, separados por una coma:

data[rows, columns]

Crear subconjuntos de filas y columnas por nombre

En R, las filas y columnas de tu dataset tienen atributos de nombre. Los nombres de fila se usan poco y por defecto proporcionan índices (enteros desde 1 hasta el número de filas del dataset), justo como has visto en la sección anterior. De hecho, si llamas a rownames() sobre el dataset iris, verás que simplemente están indexados del 1 al 150:

 > rownames(iris)
[1] "1"   "2"   "3"   "4"   "5"   "6"   "7"   "8"   "9"   "10"  "11"  "12"  "13"  "14"
[15] "15"  "16"  "17"  "18"  "19"  "20"  "21"  "22"  "23"  "24"  "25"  "26"  "27"  "28"
[29] "29"  "30"  "31"  "32"  "33"  "34"  "35"  "36"  "37"  "38"  "39"  "40"  "41"  "42"
[43] "43"  "44"  "45"  "46"  "47"  "48"  "49"  "50"  "51"  "52"  "53"  "54"  "55"  "56"
[57] "57"  "58"  "59"  "60"  "61"  "62"  "63"  "64"  "65"  "66"  "67"  "68"  "69"  "70"
[71] "71"  "72"  "73"  "74"  "75"  "76"  "77"  "78"  "79"  "80"  "81"  "82"  "83"  "84"
[85] "85"  "86"  "87"  "88"  "89"  "90"  "91"  "92"  "93"  "94"  "95"  "96"  "97"  "98"
[99] "99"  "100" "101" "102" "103" "104" "105" "106" "107" "108" "109" "110" "111" "112"
[113] "113" "114" "115" "116" "117" "118" "119" "120" "121" "122" "123" "124" "125" "126"
[127] "127" "128" "129" "130" "131" "132" "133" "134" "135" "136" "137" "138" "139" "140"
[141] "141" "142" "143" "144" "145" "146" "147" "148" "149" "150"

> nrow(iris)
[1] 150

Los nombres de fila son más habituales en datasets pequeños y sirven para identificar fácilmente las observaciones. Por ejemplo, en un conjunto de datos reducido con información sanitaria de pacientes de un médico, los nombres de fila podrían ser los nombres completos de los pacientes.

Los nombres de columna, en cambio, están presentes en prácticamente cualquier dataset. Puedes acceder a ellos con la función colnames() o con names():

colnames(iris)
[1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species"     

names(iris)
[1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species"

Para crear un subconjunto por los nombres de filas y columnas, usa de nuevo los corchetes, precedidos por el objeto del dataset:

# Ancho del sépalo de la quinta observación iris["5", "Sepal.Width"] # Ancho del sépalo y ancho del pétalo iris[, c("Sepal.Width", "Petal.Width")]

Es importante tener en cuenta que tanto los nombres de fila como los de columna son caracteres, así que es imprescindible usar comillas simples o dobles.

Crear subconjuntos de filas y columnas por valor

Seleccionar filas y columnas por valor suele ser lo más flexible. Por ejemplo, puedes extraer los datos de Iris setosa usando una condición como esta:

> iris[iris$Species == "setosa", ]
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
4           4.6         3.1          1.5         0.2  setosa

...

47          5.1         3.8          1.6         0.2  setosa
48          4.6         3.2          1.4         0.2  setosa
49          5.3         3.7          1.5         0.2  setosa
50          5.0         3.3          1.4         0.2  setosa

Las expresiones condicionales como iris$Species == "setosa" van en el elemento de filas dentro de los corchetes (es decir, el primer elemento antes de la coma). Además de la condición en el primer elemento, puedes indicar las columnas por índice o por nombre en el segundo. En la consola de abajo, prueba a seleccionar solo las medidas del sépalo de Iris setosa:

# Imprime las medidas del sépalo para setosa # Imprime las medidas del sépalo para setosa (por nombre) iris[iris$Species == "setosa", c("Sepal.Length", "Sepal.Width")] # Imprime las medidas del sépalo para setosa (por índice) iris[iris$Species == "setosa", 1:2] test_or( test_output_contains('iris[iris$Species == "setosa", c("Sepal.Length", "Sepal.Width")]', incorrect_msg = "Selecciona solo las columnas Sepal.Length y Sepal.Width para setosa, por nombre o por índice."), test_output_contains('iris[iris$Species == "setosa", c("Sepal.Width", "Sepal.Length")]', incorrect_msg = "Selecciona solo las columnas Sepal.Length y Sepal.Width para setosa, por nombre o por índice.")) success_msg("¡Buen trabajo!")

Resumen

En este tutorial:

  • Has aprendido a crear subconjuntos de tu data frame por índice. Las filas y columnas se indexan con enteros desde 1 hasta el número de filas y columnas, respectivamente.
  • Has aprendido a crear subconjuntos por nombre. Has visto que los nombres de fila rara vez se especifican y que los nombres de columna son de tipo carácter.
  • Has aprendido a usar condiciones en el elemento de filas dentro de corchetes para crear subconjuntos por valor.
  • Has aprendido a combinar estos métodos para lograr una selección más flexible (por ejemplo, usando condiciones para las filas y seleccionando por índice o nombre para las columnas).

A continuación, encontrarás unos ejercicios para reforzar lo aprendido. La práctica hace al maestro, ¡así que anímate a intentarlos!

Ejercicios prácticos

Selecciona todas las observaciones en las que el ancho del sépalo sea mayor que la longitud del pétalo.

# ¿Qué observaciones tienen mayor ancho de sépalo que longitud de pétalo? # ¿Qué observaciones tienen mayor ancho de sépalo que longitud de pétalo? iris[iris$Sepal.Width > iris$Petal.Length, ] test_output_contains('iris[iris$Sepal.Width > iris$Petal.Length, ]', incorrect_msg = paste("Selecciona las observaciones en las que los valores de Sepal.Width", "sean mayores que los valores de Petal.Length.")) success_msg("¡Bien! Resulta que solo Iris setosa tiene esta forma.")
Usa iris$Sepal.Width > iris$Petal.Length dentro de los corchetes. ¡No olvides la coma!

Selecciona todas las Iris versicolor cuyo ancho del sépalo sea mayor que el ancho medio del sépalo entre todas las especies.

# Guarda los datos de versicolor en un objeto llamado versicolor # Selecciona todas las Iris versicolor con un ancho de sépalo superior a la media # Guarda los datos de versicolor en un objeto llamado versicolor versicolor <- iris[iris$Species == "versicolor", ] # Selecciona todas las Iris versicolor con un ancho de sépalo superior a la media versicolor[versicolor$Sepal.Width > mean(iris$Sepal.Width), ] test_object('versicolor', undefined_msg = "¿Has definido el objeto versicolor?", incorrect_msg = paste("Selecciona donde Species sea igual a \"versicolor\".", "¡Recuerda usar el operador ==!")) test_output_contains('versicolor[versicolor$Sepal.Width > mean(iris$Sepal.Width), ]', incorrect_msg = paste("¡Casi! ¿Estás usando la función mean()", "para calcular el ancho medio del sépalo en todas las especies", "y no solo en Iris versicolor?")) success_msg("¡Gran trabajo!")
Usa la función mean() para calcular el ancho medio del sépalo en iris y luego una condición, prefijada por versicolor, para quedarte solo con los valores por encima de la media.

Indica el ancho medio del sépalo para todas las Iris virginica que tengan longitudes de pétalo menores de 5 centímetros.

# ¡Puedes abordar este problema como prefieras! # Guarda los datos de virginica en un objeto llamado virginica virginica <- iris[iris$Species == "virginica", ] # Ancho medio del sépalo para Iris virginica con longitudes de pétalo menores de 5 mean(virginica[virginica$Petal.Length < 5, ]$Sepal.Width) test_output_contains('2.8', incorrect_msg = "¡Incorrecto! ¡Este es difícil!") success_msg("¡Excelente!")
Primero, crea un subconjunto con todas las Iris virginica y luego con aquellas donde Petal.Length sea menor que 5. Puedes obtener la media con la función mean().

¿Quieres aprender más formas de extraer insights de tus datos? Echa un vistazo a estos cursos en DataCamp.

Revisa también nuestro tutorial Merging Datasets in R.

Temas
R
Ciencia de datos

Más sobre R

Curso

Manipulación de datos con dplyr

4 h
173.9K
Desarrolla tus habilidades en Tidyverse y aprende a transformar y manipular datos con dplyr.
Ver detallesRight Arrow
Iniciar Curso
Ver másRight Arrow
Relacionado

Tutorial

Tutorial de Subconjuntos en R

Descubre cómo acceder a los datos de tu marco de datos con el subconjunto. Aprende a hacer subconjuntos utilizando paréntesis o la función subconjunto() de R.
DataCamp Team's photo

DataCamp Team

4 min

Tutorial

Creación de una lista en R

Practica Listas en R utilizando el material del curso Introducción a R de DataCamp.
Ryan Sheehy's photo

Ryan Sheehy

3 min

Tutorial

Tutorial de tablas de contingencia en R

En este tutorial, aprenderás a crear tablas de contingencia y a probar y cuantificar las relaciones visibles en ellas.
Łukasz Deryło's photo

Łukasz Deryło

10 min

Tutorial

Tutorial sobre el uso de funciones en R

Descubra qué son las funciones R, los diferentes tipos de funciones en R y cómo crear sus propias funciones en R.
Javier Canales Luna's photo

Javier Canales Luna

11 min

Tutorial

A Loops in R Tutorial - Uso y Alternativas

Un tutorial sobre bucles en R que examina las construcciones disponibles en R para realizar bucles. Descubra alternativas utilizando la función de vectorización de R.
Carlo Fanara's photo

Carlo Fanara

32 min

Tutorial

Tutorial de K-Means Clustering en R

Aprenda qué es k-means y descubra por qué es uno de los algoritmos de agrupación más utilizados en la ciencia de datos.
Eugenia Anello's photo

Eugenia Anello

8 min

Ver MásVer Más