{"id":32964,"date":"2025-05-05T21:01:08","date_gmt":"2025-05-05T21:01:08","guid":{"rendered":"http:\/\/toposuranos.com\/material\/?p=32964"},"modified":"2025-05-13T22:56:04","modified_gmt":"2025-05-13T22:56:04","slug":"creacion-y-manipulacion-de-data-frames-en-r","status":"publish","type":"post","link":"https:\/\/toposuranos.com\/material\/es\/creacion-y-manipulacion-de-data-frames-en-r\/","title":{"rendered":"Creaci\u00f3n y Manipulaci\u00f3n de data.frames en R"},"content":{"rendered":"<p><head><\/p>\n<style>\n    p, ul, ol {\n      text-align: justify;\n    }\n    h1 {\n      text-align: center;\n      text-transform: uppercase;\n    }\n    h2 {\n      text-align: center;\n      text-transform: uppercase;\n      font-size: 24pt;\n    }\n    h3 {\n      text-align: center;\n      text-transform: uppercase;\n      font-size: 24px !important;\n    }\n    .table-limites {\n      width: 100%;\n      border-collapse: collapse;\n      margin: 25px 0;\n      font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n      box-shadow: 0 0 20px rgba(0, 0, 0, 0.05);\n      border-radius: 8px;\n      overflow: hidden;\n    }\n    .table-limites thead tr {\n      background-color: #2c3e50;\n      color: #ffffff;\n      text-align: left;\n    }\n    .table-limites th,\n    .table-limites td {\n      padding: 12px 15px;\n      border: 1px solid #e0e0e0;\n    }\n    .table-limites tbody tr {\n      border-bottom: 1px solid #e0e0e0;\n    }\n    .table-limites tbody tr:nth-of-type(even) {\n      background-color: #f8f9fa;\n    }\n    .table-limites tbody tr:last-of-type {\n      border-bottom: 2px solid #2c3e50;\n    }\n    .table-limites tbody tr:hover {\n      background-color: #f1f4f7;\n      cursor: default;\n    }\n    .code-param {\n      font-family: 'Fira Code', monospace;\n      background-color: #f3f6f9;\n      padding: 2px 6px;\n      border-radius: 4px;\n      color: #2c3e50;\n    }\n    .valor-cientifico {\n      font-family: 'Roboto Mono', monospace;\n      color: #27ae60;\n    }\n.table-limites thead th {\n  color: #ffffff !important;\n}<\/p>\n<\/style>\n<p><\/head><br \/>\n<body><\/p>\n<h1>Creaci\u00f3n y Manipulaci\u00f3n de data.frames en R<\/h1>\n<p style=\"text-align:center;\">\n<em>En esta lecci\u00f3n aprender\u00e1s todo lo necesario para trabajar con <code>data.frames<\/code> en R: c\u00f3mo crearlos, explorarlos, modificarlos y acceder a su contenido con precisi\u00f3n. A trav\u00e9s de ejemplos claros y explicaciones directas, dominar\u00e1s la estructura de datos m\u00e1s usada en an\u00e1lisis estad\u00edstico y te preparar\u00e1s para dar el siguiente paso en el manejo profesional de datos.<\/em>\n<\/p>\n<p style=\"text-align:center;\"><strong>Objetivos de Aprendizaje<\/strong><br \/>\nAl finalizar esta clase, el estudiante ser\u00e1 capaz de:\n<\/p>\n<ul>\n<li><strong>Identificar<\/strong> la estructura interna de un <code>data.frame<\/code> y sus componentes b\u00e1sicos.<\/li>\n<li><strong>Distinguir<\/strong> las diferencias clave entre <code>data.frame<\/code>, <code>list<\/code>, <code>matrix<\/code> y <code>tibble<\/code>.<\/li>\n<li><strong>Crear<\/strong> <code>data.frames<\/code> manualmente o a partir de otras estructuras de datos.<\/li>\n<li><strong>Acceder<\/strong> a los elementos de un <code>data.frame<\/code> mediante diferentes operadores y t\u00e9cnicas.<\/li>\n<li><strong>Modificar<\/strong> un <code>data.frame<\/code> agregando, eliminando o transformando columnas y filas.<\/li>\n<li><strong>Aplicar<\/strong> transformaciones elementales sobre columnas para preparar los datos para an\u00e1lisis posteriores.<\/li>\n<\/ul>\n<p style=\"text-align:center;\"><strong><u>\u00cdNDICE DE CONTENIDOS<\/u>:<\/strong><br \/>\n<a href=\"#1\">Introducci\u00f3n a los data.frames<\/a><br \/>\n<a href=\"#2\">Acceso a elementos dentro de un data.frame<\/a><br \/>\n<a href=\"#3\">Modificaci\u00f3n de data.frames<\/a><br \/>\n<a href=\"#4\">Ejercicios propuestos: Acceso y modificaci\u00f3n de data.frames<\/a>\n<\/p>\n<p><a name=\"1\"><\/a><\/p>\n<h2>Introducci\u00f3n a los data.frames<\/h2>\n<h3>\u00bfQu\u00e9 es un data.frame?<\/h3>\n<p>Un <strong><code>data.frame<\/code><\/strong> es una de las estructuras de datos m\u00e1s fundamentales y vers\u00e1tiles del lenguaje R. Representa una <strong>tabla bidimensional<\/strong> compuesta por filas y columnas, donde:<\/p>\n<ul>\n<li>Cada <strong>columna<\/strong> representa una variable o caracter\u00edstica.<\/li>\n<li>Cada <strong>fila<\/strong> representa una observaci\u00f3n o caso individual.<\/li>\n<\/ul>\n<p>A diferencia de una <code>matrix<\/code> (que solo admite un tipo de dato), un <code>data.frame<\/code> permite que cada columna contenga tipos distintos, como <code>numeric<\/code>, <code>character<\/code> o <code>logical<\/code>. Esta flexibilidad lo convierte en el formato ideal para almacenar y manipular datos observacionales, como los que provienen de encuestas, experimentos o registros administrativos.<\/p>\n<div class=\"note\">\n<p><strong>Nota:<\/strong> Internamente, un <code>data.frame<\/code> es una lista estructurada de vectores del mismo largo, con atributos especiales que permiten su uso como tabla.<\/p>\n<\/div>\n<p>Visualmente, puedes imaginar un <code>data.frame<\/code> como una hoja de c\u00e1lculo o una tabla de Excel, con nombres de columnas en la parte superior y los datos organizados en filas. Por ejemplo:<\/p>\n<table class=\"table-limites\">\n<thead>\n<tr>\n<th>nombre<\/th>\n<th>edad<\/th>\n<th>aprobado<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Ana<\/td>\n<td>23<\/td>\n<td>TRUE<\/td>\n<\/tr>\n<tr>\n<td>Luis<\/td>\n<td>31<\/td>\n<td>TRUE<\/td>\n<\/tr>\n<tr>\n<td>Marta<\/td>\n<td>29<\/td>\n<td>FALSE<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Esta tabla puede crearse f\u00e1cilmente en R con el siguiente c\u00f3digo:<\/p>\n<pre class=\"brush: r; title: ; notranslate\" title=\"\">\r\nnombre &lt;- c(&quot;Ana&quot;, &quot;Luis&quot;, &quot;Marta&quot;)\r\nedad &lt;- c(23, 31, 29)\r\naprobado &lt;- c(TRUE, TRUE, FALSE)\r\n\r\ndf &lt;- data.frame(nombre, edad, aprobado)\r\nprint(df)<\/pre>\n<p>Dominar el uso de los <code>data.frames<\/code> es esencial para cualquier an\u00e1lisis de datos en R. Muchas funciones estad\u00edsticas, gr\u00e1ficas y de transformaci\u00f3n de datos asumen que los datos est\u00e1n organizados bajo esta estructura. En este art\u00edculo aprender\u00e1s c\u00f3mo crearlos, acceder a su contenido, modificarlos y transformarlos de manera eficiente.<\/p>\n<h3>Estructura b\u00e1sica de un <code>data.frame<\/code><\/h3>\n<p>Un <code>data.frame<\/code> en R no solo se comporta como una tabla visual de datos, sino que tambi\u00e9n posee una <strong>estructura interna bien definida<\/strong> que lo hace especialmente \u00fatil para el an\u00e1lisis de datos.<\/p>\n<p>Desde el punto de vista t\u00e9cnico, un <code>data.frame<\/code> es una <strong>lista especial de vectores<\/strong> que cumple las siguientes condiciones:<\/p>\n<ul>\n<li>Todos los vectores (columnas) deben tener la <strong>misma longitud<\/strong>.<\/li>\n<li>Cada columna puede tener un tipo de dato distinto (<code>numeric<\/code>, <code>character<\/code>, <code>logical<\/code>, etc.).<\/li>\n<li>El objeto tiene atributos que le permiten comportarse como tabla: nombres de filas, nombres de columnas y la clase <code>\"data.frame\"<\/code>.<\/li>\n<\/ul>\n<p>Para examinar esta estructura, puedes usar funciones como <code>str()<\/code>, <code>attributes()<\/code> y <code>class()<\/code>. Veamos un ejemplo pr\u00e1ctico:<\/p>\n<pre class=\"brush: r; title: ; notranslate\" title=\"\">nombre &lt;- c(&quot;Ana&quot;, &quot;Luis&quot;, &quot;Marta&quot;)\r\nedad &lt;- c(23, 31, 29)\r\naprobado &lt;- c(TRUE, TRUE, FALSE)\r\n\r\ndf &lt;- data.frame(nombre, edad, aprobado)\r\n\r\n# Explorando la estructura del data.frame\r\nstr(df)\r\nattributes(df)\r\nclass(df)<\/pre>\n<p>Estas funciones nos entregan informaci\u00f3n importante:<\/p>\n<ul>\n<li><code>str(df)<\/code> muestra la estructura interna y los tipos de dato por columna.<\/li>\n<li><code>attributes(df)<\/code> devuelve una lista con atributos del objeto: nombres, dimensiones y clase.<\/li>\n<li><code>class(df)<\/code> confirma que el objeto pertenece a la clase <code>\"data.frame\"<\/code>.<\/li>\n<\/ul>\n<div class=\"note\">\n<p>Comprender la estructura interna te permite manipular tus datos con mayor seguridad, anticipar errores comunes y aplicar funciones avanzadas que trabajan directamente sobre los atributos del <code>data.frame<\/code>.<\/p>\n<\/div>\n<p>Recuerda que al ser una lista, puedes acceder a las columnas del <code>data.frame<\/code> usando el mismo sistema que para listas en R, aunque con comportamientos ligeramente distintos que exploraremos m\u00e1s adelante.<\/p>\n<h3>Comparaci\u00f3n con listas y matrices<\/h3>\n<p>Para entender mejor qu\u00e9 hace especial a un <code>data.frame<\/code>, es \u00fatil compararlo con otras dos estructuras fundamentales de R: las <strong>listas<\/strong> y las <strong>matrices<\/strong>. El <code>data.frame<\/code> toma caracter\u00edsticas de ambas, pero con un comportamiento \u00fanico que lo hace especialmente poderoso para organizar y manipular datos tabulares.<\/p>\n<h4>Similitud con listas<\/h4>\n<p>Un <code>data.frame<\/code> es, t\u00e9cnicamente, una <strong>lista de vectores<\/strong>, donde cada elemento de la lista representa una columna. Por ello, hereda de las listas la capacidad de contener diferentes tipos de datos en cada componente.<\/p>\n<ul>\n<li>Cada columna (vector) puede tener un tipo diferente: num\u00e9rico, l\u00f3gico, texto, etc.<\/li>\n<li>Las columnas son accesibles por nombre, como en una lista (<code>df[[\"edad\"]]<\/code>).<\/li>\n<\/ul>\n<p>Ejemplo:<\/p>\n<p>lista &lt;- list(nombre = c(&quot;Ana&quot;, &quot;Luis&quot;, &quot;Marta&quot;),<br \/>\n              edad = c(23, 31, 29),<br \/>\n              aprobado = c(TRUE, TRUE, FALSE))<\/p>\n<p># Convertir la lista a data.frame<br \/>\ndf &lt;- as.data.frame(lista)<br \/>\nprint(df)<\/p>\n<h4>Similitud con matrices<\/h4>\n<p>Al igual que una matriz, un <code>data.frame<\/code> tiene una <strong>estructura bidimensional<\/strong> (filas y columnas) y permite la indexaci\u00f3n por posici\u00f3n mediante corchetes dobles <code>[i, j]<\/code>.<\/p>\n<ul>\n<li>Se puede acceder a elementos por fila y columna, como en una matriz.<\/li>\n<li>Tiene dimensiones accesibles con <code>dim()<\/code>, <code>nrow()<\/code> y <code>ncol()<\/code>.<\/li>\n<\/ul>\n<p>Ejemplo:<\/p>\n<pre class=\"brush: r; title: ; notranslate\" title=\"\"># Acceso como matriz\r\ndf&#x5B;2, 1]     # Segunda fila, primera columna\r\ndf&#x5B;, &quot;edad&quot;] # Toda la columna &#039;edad&#039;<\/pre>\n<h4>\u00bfPor qu\u00e9 usar data.frame?<\/h4>\n<p>El <code>data.frame<\/code> combina lo mejor de ambos mundos:<\/p>\n<ul>\n<li>Como las <strong>listas<\/strong>, permite heterogeneidad en los tipos de dato por columna.<\/li>\n<li>Como las <strong>matrices<\/strong>, tiene una forma tabular e indexaci\u00f3n bidimensional.<\/li>\n<li>Incluye nombres para filas y columnas, facilitando operaciones intuitivas y legibles.<\/li>\n<\/ul>\n<div class=\"note\">\n<p>En resumen, el <code>data.frame<\/code> es la piedra angular para trabajar con datos estructurados en R. Su dise\u00f1o lo hace ideal para representar conjuntos de datos observacionales, y su compatibilidad con herramientas modernas como <code>dplyr<\/code> y <code>ggplot2<\/code> lo convierte en la estructura m\u00e1s utilizada para an\u00e1lisis estad\u00edstico y visualizaci\u00f3n.<\/p>\n<\/div>\n<p><a name=\"2\"><\/a><\/p>\n<h2>Creaci\u00f3n de data.frames<\/h2>\n<h3>Creaci\u00f3n manual con data.frame()<\/h3>\n<p>La forma m\u00e1s directa y controlada de crear un <code>data.frame<\/code> en R es utilizando la funci\u00f3n base <code>data.frame()<\/code>. Esta funci\u00f3n permite combinar m\u00faltiples vectores (columnas) de igual longitud en una estructura tabular. Cada vector se convierte en una columna, y sus elementos se disponen en las filas correspondientes.<\/p>\n<h4>Ejemplo b\u00e1sico<\/h4>\n<p>Supongamos que queremos almacenar informaci\u00f3n de cinco estudiantes, incluyendo su identificaci\u00f3n, nombre, edad y si obtuvieron calificaci\u00f3n destacada. Lo podemos hacer as\u00ed:<\/p>\n<pre class=\"brush: r; title: ; notranslate\" title=\"\"># Vectores de igual longitud\r\nid        &lt;- 1:5\r\nnombre    &lt;- c(&quot;Ana&quot;, &quot;Ben&quot;, &quot;Carla&quot;, &quot;Diego&quot;, &quot;Eva&quot;)\r\nedad      &lt;- c(23, 31, 27, 29, 22)\r\ncalif_exc &lt;- c(TRUE, FALSE, TRUE, TRUE, FALSE)\r\n\r\n# Construcci\u00f3n del data.frame\r\nalumnos &lt;- data.frame(id, nombre, edad, calif_exc)\r\n\r\n# Visualizaci\u00f3n\r\nprint(alumnos)<\/pre>\n<table class=\"table-limites\">\n<thead>\n<tr>\n<th>id<\/th>\n<th>nombre<\/th>\n<th>edad<\/th>\n<th>calif_exc<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>1<\/td>\n<td>Ana<\/td>\n<td>23<\/td>\n<td>TRUE<\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td>Ben<\/td>\n<td>31<\/td>\n<td>FALSE<\/td>\n<\/tr>\n<tr>\n<td>3<\/td>\n<td>Carla<\/td>\n<td>27<\/td>\n<td>TRUE<\/td>\n<\/tr>\n<tr>\n<td>4<\/td>\n<td>Diego<\/td>\n<td>29<\/td>\n<td>TRUE<\/td>\n<\/tr>\n<tr>\n<td>5<\/td>\n<td>Eva<\/td>\n<td>22<\/td>\n<td>FALSE<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4>Verificando la estructura<\/h4>\n<p>Algunas funciones \u00fatiles para explorar el <code>data.frame<\/code> reci\u00e9n creado son:<\/p>\n<pre class=\"brush: r; title: ; notranslate\" title=\"\">\r\ndim(alumnos)     # Dimensiones: n\u00famero de filas y columnas\r\nstr(alumnos)     # Estructura interna\r\nsummary(alumnos) # Estad\u00edsticas b\u00e1sicas por columna\r\n<\/pre>\n<h4>Control de comportamiento por defecto<\/h4>\n<p>En versiones antiguas de R (anteriores a la 4.0.0), la funci\u00f3n <code>data.frame()<\/code> convert\u00eda autom\u00e1ticamente columnas de texto (<code>character<\/code>) en factores (<code>factor<\/code>). Esto pod\u00eda ser \u00fatil para variables categ\u00f3ricas, pero causaba problemas al realizar manipulaciones de texto. En versiones modernas, este comportamiento ya no es predeterminado, pero a\u00fan puede controlarse expl\u00edcitamente con el argumento <code>stringsAsFactors<\/code>:<\/p>\n<pre class=\"brush: r; title: ; notranslate\" title=\"\"># Versi\u00f3n segura para cualquier R\r\nalumnos &lt;- data.frame(id, nombre, edad, calif_exc,\r\n                      stringsAsFactors = FALSE)<\/pre>\n<div class=\"note\">\n<p><strong>Consejo:<\/strong> Para asegurar reproducibilidad del script en cualquier versi\u00f3n de R, se recomienda siempre especificar <code>stringsAsFactors = FALSE<\/code> al trabajar con datos de texto.<\/p>\n<\/div>\n<h4>Personalizaci\u00f3n adicional: nombres de filas y columnas no sint\u00e1cticos<\/h4>\n<p>La funci\u00f3n <code>data.frame()<\/code> permite controlar aspectos avanzados de la tabla como:<\/p>\n<ul>\n<li><code>row.names<\/code>: establecer etiquetas personalizadas para las filas.<\/li>\n<li><code>check.names = FALSE<\/code>: permitir nombres de columnas con espacios o s\u00edmbolos especiales (por ejemplo, <code>\"Precio $\"<\/code> o <code>\"Ventas 2025\"<\/code>).<\/li>\n<\/ul>\n<p>Ejemplo:<\/p>\n<pre class=\"brush: r; title: ; notranslate\" title=\"\">ventas_diarias &lt;- data.frame(\r\n  &quot;Fecha venta&quot; = as.Date(&quot;2025-05-01&quot;) + 0:2,\r\n  &quot;Unidades vendidas&quot; = c(10L, 7L, 12L),\r\n  &quot;Precio $&quot; = c(15.5, 15.5, 17.0),\r\n  row.names = paste0(&quot;ID&quot;, 101:103),\r\n  check.names = FALSE,\r\n  stringsAsFactors = FALSE\r\n)\r\n\r\nprint(ventas_diarias)<\/pre>\n<p>Este ejemplo ilustra c\u00f3mo construir un <code>data.frame<\/code> con columnas cuyos nombres incluyen espacios y s\u00edmbolos, conservando etiquetas personalizadas para las filas:<\/p>\n<table class=\"table-limites\">\n<thead>\n<tr>\n<th><\/th>\n<th>Fecha venta<\/th>\n<th>Unidades vendidas<\/th>\n<th>Precio $<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>ID101<\/td>\n<td>2025-05-01<\/td>\n<td>10<\/td>\n<td>15.5<\/td>\n<\/tr>\n<tr>\n<td>ID102<\/td>\n<td>2025-05-02<\/td>\n<td>7<\/td>\n<td>15.5<\/td>\n<\/tr>\n<tr>\n<td>ID103<\/td>\n<td>2025-05-03<\/td>\n<td>12<\/td>\n<td>17.0<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div class=\"note\">\n<p>El uso de <code>check.names = FALSE<\/code> es \u00fatil para mantener nombres no est\u00e1ndar en columnas, aunque requiere acceder a ellas con comillas invertidas o \u00edndices. Por ejemplo, <code>ventas_diarias$`Precio $`<\/code>.<\/p>\n<\/div>\n<h4>Resumen<\/h4>\n<p>La funci\u00f3n <code>data.frame()<\/code> es una herramienta nativa y flexible para construir tablas de datos. Aunque tiene algunas limitaciones heredadas por compatibilidad hist\u00f3rica, ofrece m\u00faltiples argumentos para personalizar la estructura y comportamiento del objeto creado.<\/p>\n<ul>\n<li><strong>\u2705 Ventaja:<\/strong> Vers\u00e1til, sencilla, nativa de R y sin necesidad de paquetes externos.<\/li>\n<li><strong>\u26a0\ufe0f Cuidado:<\/strong> Aseg\u00farate de controlar el argumento <code>stringsAsFactors<\/code> y evita nombres de columna conflictivos si no activas <code>check.names = FALSE<\/code>.<\/li>\n<\/ul>\n<h3>Conversi\u00f3n desde otras estructuras (<code>matrix<\/code>, <code>list<\/code>)<\/h3>\n<p>En muchos casos, los datos ya existen en otras estructuras de R, como <code>matrix<\/code> o <code>list<\/code>. Afortunadamente, R permite convertir estos objetos f\u00e1cilmente a <code>data.frames<\/code>, manteniendo sus contenidos y adapt\u00e1ndolos a una forma tabular.<\/p>\n<p>Este tipo de conversi\u00f3n es especialmente \u00fatil cuando los datos han sido generados program\u00e1ticamente, provienen de funciones intermedias o se han importado de fuentes externas (como archivos de texto o paquetes).<\/p>\n<h4>Desde una <code>matrix<\/code><\/h4>\n<p>Una <code>matrix<\/code> es una estructura bidimensional homog\u00e9nea, es decir, todos sus elementos deben ser del mismo tipo de dato (por ejemplo, todos <code>numeric<\/code> o todos <code>character<\/code>). Al convertir una <code>matrix<\/code> en un <code>data.frame<\/code>, R transforma cada columna de la matriz en una columna del nuevo <code>data.frame<\/code>.<\/p>\n<h5>Ejemplo: matriz de distancias<\/h5>\n<p>Imaginemos que tienes una matriz con las distancias entre tres ciudades:<\/p>\n<pre class=\"brush: r; title: ; notranslate\" title=\"\"># Crear matriz 3x3 con distancias entre ciudades\r\ndistancias &lt;- matrix(c(0,  5,  8,\r\n                       5,  0, 12,\r\n                       8, 12, 0),\r\n                     nrow = 3, byrow = TRUE)\r\n\r\n# Nombrar filas y columnas\r\ncolnames(distancias) &lt;- c(&quot;A&quot;, &quot;B&quot;, &quot;C&quot;)\r\nrownames(distancias) &lt;- c(&quot;A&quot;, &quot;B&quot;, &quot;C&quot;)\r\n\r\n# Convertir a data.frame\r\ndf_dist &lt;- as.data.frame(distancias)\r\n\r\n# Visualizar\r\nprint(df_dist)<\/pre>\n<table class=\"table-limites\">\n<thead>\n<tr>\n<th><\/th>\n<th>A<\/th>\n<th>B<\/th>\n<th>C<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>A<\/td>\n<td>0<\/td>\n<td>5<\/td>\n<td>8<\/td>\n<\/tr>\n<tr>\n<td>B<\/td>\n<td>5<\/td>\n<td>0<\/td>\n<td>12<\/td>\n<\/tr>\n<tr>\n<td>C<\/td>\n<td>8<\/td>\n<td>12<\/td>\n<td>0<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Observa que:<\/p>\n<ul>\n<li>Las columnas y filas heredan los nombres asignados en la matriz original.<\/li>\n<li>Las distancias se preservan y se organizan por ciudad origen y ciudad destino.<\/li>\n<li>El \u00edndice de fila se convierte autom\u00e1ticamente en el atributo <code>row.names<\/code> del <code>data.frame<\/code>.<\/li>\n<\/ul>\n<h5>Advertencia<\/h5>\n<div class=\"note\">\n<p>Si la matriz contiene elementos de tipos distintos (por ejemplo, n\u00fameros y texto), R los convertir\u00e1 todos a texto (<code>character<\/code>) antes de formar la matriz, ya que las matrices deben ser homog\u00e9neas. Esto puede afectar la utilidad de la conversi\u00f3n posterior a <code>data.frame<\/code>.<\/p>\n<\/div>\n<h4>Desde una <code>list<\/code><\/h4>\n<p>Una <code>list<\/code> en R es una estructura unidimensional que puede contener objetos de cualquier tipo, incluyendo vectores, matrices, funciones o incluso otras listas. Es la estructura m\u00e1s flexible del lenguaje.<\/p>\n<p>Cuando los elementos de una lista son vectores del mismo largo, y cada elemento representa una variable distinta, se puede convertir directamente a <code>data.frame<\/code>. Cada componente se convertir\u00e1 en una columna del nuevo objeto tabular.<\/p>\n<h5>Ejemplo: datos de ciudades<\/h5>\n<pre class=\"brush: r; title: ; notranslate\" title=\"\"># Crear una lista con vectores del mismo largo\r\ndatos_lista &lt;- list(\r\n  ciudad = c(&quot;SCL&quot;, &quot;LIM&quot;, &quot;BOG&quot;),\r\n  temp_media = c(14.5, 19.1, 17.8),\r\n  coste_vida = c(90, 75, 70)\r\n)\r\n\r\n# Convertir a data.frame\r\nciudades &lt;- as.data.frame(datos_lista)\r\n\r\n# Examinar estructura\r\nstr(ciudades)<\/pre>\n<p>El resultado es el siguiente <code>data.frame<\/code>:<\/p>\n<table class=\"table-limites\">\n<thead>\n<tr>\n<th>ciudad<\/th>\n<th>temp_media<\/th>\n<th>coste_vida<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>SCL<\/td>\n<td>14.5<\/td>\n<td>90<\/td>\n<\/tr>\n<tr>\n<td>LIM<\/td>\n<td>19.1<\/td>\n<td>75<\/td>\n<\/tr>\n<tr>\n<td>BOG<\/td>\n<td>17.8<\/td>\n<td>70<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Ventajas de esta conversi\u00f3n:<\/p>\n<ul>\n<li>El <code>data.frame<\/code> conserva los nombres de cada componente de la lista como nombres de columnas.<\/li>\n<li>Los tipos de dato se mantienen: num\u00e9rico, texto, etc.<\/li>\n<li>La estructura resultante es ideal para an\u00e1lisis estad\u00edstico y visualizaci\u00f3n.<\/li>\n<\/ul>\n<h5>Casos comunes de uso<\/h5>\n<p>Este tipo de conversi\u00f3n es \u00fatil cuando:<\/p>\n<ul>\n<li>Est\u00e1s recolectando datos progresivamente en una lista y luego necesitas organizarlos como tabla.<\/li>\n<li>Has procesado datos de una API, archivo JSON o lectura en formato estructurado.<\/li>\n<li>Est\u00e1s programando funciones que devuelven datos heterog\u00e9neos como resultado intermedio.<\/li>\n<\/ul>\n<div class=\"note\">\n<p><strong>Resumen:<\/strong> Convertir desde <code>matrix<\/code> o <code>list<\/code> a <code>data.frame<\/code> es una pr\u00e1ctica habitual que te permite reaprovechar estructuras previas y mantener una organizaci\u00f3n tabular clara. Aseg\u00farate de validar tipos de datos, nombres y dimensiones antes de la conversi\u00f3n para evitar errores inesperados.<\/p>\n<\/div>\n<h3>Uso de <code>tibble::tibble()<\/code> como alternativa moderna<\/h3>\n<p>El paquete <code>tibble<\/code>, parte del ecosistema <a href=\"https:\/\/www.tidyverse.org\" target=\"_blank\"><em>tidyverse<\/em><\/a>, ofrece una alternativa moderna y m\u00e1s robusta a los <code>data.frames<\/code> tradicionales: el <strong><code>tibble<\/code><\/strong>.<\/p>\n<p>Aunque conceptualmente son equivalentes, los <code>tibble<\/code> introducen mejoras significativas en usabilidad, legibilidad y seguridad. Se comportan como <code>data.frames<\/code> en la mayor\u00eda de los contextos, pero corrigen algunas de sus limitaciones heredadas del dise\u00f1o original de R.<\/p>\n<h4>Ventajas clave de los <code>tibble<\/code><\/h4>\n<ul>\n<li><strong>Impresi\u00f3n amigable:<\/strong> Solo muestran las primeras filas y columnas que caben en la consola, evitando saturaci\u00f3n visual.<\/li>\n<li><strong>No conversi\u00f3n impl\u00edcita:<\/strong> Nunca transforman columnas de texto en factores, ni alteran los tipos de datos de forma silenciosa.<\/li>\n<li><strong>Compatibilidad:<\/strong> Se integran perfectamente con paquetes como <code>dplyr<\/code> (manipulaci\u00f3n) y <code>ggplot2<\/code> (visualizaci\u00f3n).<\/li>\n<li><strong>Columnas no sint\u00e1cticas:<\/strong> Permiten nombres de columna con espacios, s\u00edmbolos o n\u00fameros iniciales sin necesidad de modificar o forzar alias.<\/li>\n<\/ul>\n<pre class=\"brush: r; title: ; notranslate\" title=\"\"># Cargar paquete\r\nlibrary(tibble)\r\n\r\n# Crear un tibble\r\nventas &lt;- tibble(\r\n  fecha = as.Date(&quot;2025-01-01&quot;) + 0:4,\r\n  producto = c(&quot;A&quot;, &quot;A&quot;, &quot;B&quot;, &quot;A&quot;, &quot;C&quot;),\r\n  unidades = c(5L, 3L, 4L, 6L, 2L),\r\n  precio_unit = c(12.5, 12.5, 15.0, 12.5, 17.0)\r\n)\r\n\r\n# Imprimir tibble\r\nprint(ventas)<\/pre>\n<h4>Resultado en consola (formato tibble)<\/h4>\n<p>La salida en consola de un <code>tibble<\/code> se ve as\u00ed (respetando el ancho de pantalla):<\/p>\n<pre>\r\n# A tibble: 5 \u00d7 4\r\n  fecha      producto unidades precio_unit\r\n  <date>     <chr>       <int>       <dbl>\r\n1 2025-01-01 A               5        12.5\r\n2 2025-01-02 A               3        12.5\r\n3 2025-01-03 B               4        15.0\r\n4 2025-01-04 A               6        12.5\r\n5 2025-01-05 C               2        17.0\r\n<\/pre>\n<h4>Diferencias clave entre <code>data.frame<\/code> y <code>tibble<\/code><\/h4>\n<table class=\"table-limites\">\n<thead>\n<tr>\n<th>Aspecto<\/th>\n<th><code>data.frame<\/code><\/th>\n<th><code>tibble<\/code><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Impresi\u00f3n<\/td>\n<td>Muestra todo, incluso tablas grandes<\/td>\n<td>Muestra solo primeras filas\/columnas visibles<\/td>\n<\/tr>\n<tr>\n<td>Conversi\u00f3n de texto a factor<\/td>\n<td>Autom\u00e1tica en versiones antiguas<\/td>\n<td>Nunca convierte texto a factores<\/td>\n<\/tr>\n<tr>\n<td>Columnas con nombres no sint\u00e1cticos<\/td>\n<td>Requiere <code>check.names = FALSE<\/code><\/td>\n<td>Permitidos directamente (usando comillas invertidas)<\/td>\n<\/tr>\n<tr>\n<td>Subconjuntos con <code>[,]<\/code><\/td>\n<td>Puede devolver vectores<\/td>\n<td>Siempre devuelve otro <code>tibble<\/code><\/td>\n<\/tr>\n<tr>\n<td>Tipos visibles al imprimir<\/td>\n<td>No<\/td>\n<td>S\u00ed (informaci\u00f3n adicional junto a cada columna)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4>Ejemplo con nombres complejos<\/h4>\n<pre class=\"brush: r; title: ; notranslate\" title=\"\">ventas_2025 &lt;- tibble(\r\n  `Fecha de venta` = as.Date(&quot;2025-01-01&quot;) + 0:2,\r\n  `Precio $` = c(10, 12, 11.5),\r\n  `Unidades vendidas` = c(5, 3, 6)\r\n)\r\n\r\n# Acceso usando comillas invertidas\r\nventas_2025$`Precio $`<\/pre>\n<p>Esto funciona sin problemas, y el tibble conserva los nombres sin forzarlos a ser nombres sint\u00e1cticamente v\u00e1lidos (como har\u00eda <code>data.frame()<\/code>).<\/p>\n<h4>\u00bfCu\u00e1ndo usar <code>tibble<\/code>?<\/h4>\n<ul>\n<li>Cuando trabajas en un entorno interactivo o proyectos con gran volumen de datos.<\/li>\n<li>Cuando usas el enfoque del <em>tidyverse<\/em> para manipular, visualizar y modelar datos.<\/li>\n<li>Cuando deseas una representaci\u00f3n m\u00e1s segura, clara y predecible del comportamiento de tus datos.<\/li>\n<\/ul>\n<div class=\"note\">\n<p><strong>Recomendaci\u00f3n:<\/strong> Aunque <code>tibble<\/code> y <code>data.frame<\/code> son conceptualmente equivalentes, se recomienda preferir <code>tibble<\/code> en an\u00e1lisis modernos y colaborativos. No obstante, comprender en profundidad la creaci\u00f3n manual con <code>data.frame()<\/code> sigue siendo fundamental para dominar R desde sus fundamentos.<\/p>\n<\/div>\n<p><a name=\"3\"><\/a><\/p>\n<h2>Acceso a elementos dentro de un data.frame<\/h2>\n<h3>Acceso por nombre de columna (<code>df$columna<\/code>)<\/h3>\n<p>Una de las formas m\u00e1s comunes y legibles de acceder a los datos dentro de un <code>data.frame<\/code> es mediante el operador <code>$<\/code>. Este operador permite obtener directamente una columna a partir de su nombre, devolvi\u00e9ndola como un vector.<\/p>\n<p>La sintaxis general es:<\/p>\n<pre class=\"brush: r; title: ; notranslate\" title=\"\">nombre_data_frame$nombre_columna<\/pre>\n<p>Este m\u00e9todo es especialmente \u00fatil cuando conoces el nombre exacto de la columna que deseas utilizar, y necesitas operar directamente con sus valores.<\/p>\n<h4>Ejemplo b\u00e1sico<\/h4>\n<p>Supongamos que tienes un <code>data.frame<\/code> llamado <code>df<\/code> que contiene informaci\u00f3n b\u00e1sica de personas:<\/p>\n<pre class=\"brush: r; title: ; notranslate\" title=\"\">\r\ndf &lt;- data.frame(\r\n  ID = 1:3,\r\n  Nombre = c(&quot;Ana&quot;, &quot;Luis&quot;, &quot;Mar\u00eda&quot;),\r\n  Edad = c(28, 34, 25)\r\n)\r\n<\/pre>\n<p>Para acceder a la columna <code>Edad<\/code>, simplemente escribimos:<\/p>\n<pre class=\"brush: r; title: ; notranslate\" title=\"\">\r\n# Acceder a la columna Edad\r\nedades &lt;- df$Edad\r\nprint(edades)\r\n<\/pre>\n<p>Salida:<\/p>\n<pre>\r\n[1] 28 34 25\r\n<\/pre>\n<p>Este resultado es un vector num\u00e9rico que puedes usar en c\u00e1lculos, gr\u00e1ficas o condiciones l\u00f3gicas.<\/p>\n<h4>Ventajas de este m\u00e9todo<\/h4>\n<ul>\n<li>\u2705 <strong>Claridad sem\u00e1ntica:<\/strong> el uso de nombres expl\u00edcitos facilita la lectura del c\u00f3digo.<\/li>\n<li>\u2705 <strong>Comodidad:<\/strong> especialmente \u00fatil en sesiones interactivas o scripts simples.<\/li>\n<li>\u2705 <strong>Completado autom\u00e1tico:<\/strong> en entornos como RStudio, puedes usar autocompletado al escribir <code>df$<\/code>.<\/li>\n<\/ul>\n<h4>Limitaciones<\/h4>\n<ul>\n<li>\u26a0\ufe0f <strong>No funciona si el nombre de la columna contiene espacios o s\u00edmbolos especiales<\/strong>. En esos casos debes usar comillas inversas o <code>[[ ]]<\/code>.<\/li>\n<li>\u26a0\ufe0f <strong>No es program\u00e1ticamente flexible<\/strong> si el nombre de la columna se almacena en una variable.<\/li>\n<\/ul>\n<h4>Ejemplo con nombre problem\u00e1tico<\/h4>\n<p>Si tienes un nombre de columna como <code>\"Precio $\"<\/code>, deber\u00e1s usar comillas invertidas:<\/p>\n<pre class=\"brush: r; title: ; notranslate\" title=\"\">\r\ndf &lt;- data.frame(&quot;Precio $&quot; = c(10, 12, 15), check.names = FALSE)\r\nprint(df$`Precio $`)\r\n<\/pre>\n<h4>Alternativa con <code>[[ ]]<\/code> para nombres din\u00e1micos<\/h4>\n<p>Cuando el nombre de la columna se guarda en una variable, el operador <code>$<\/code> no funciona. Usa <code>[[ ]]<\/code> en su lugar:<\/p>\n<pre class=\"brush: r; title: ; notranslate\" title=\"\">\r\ncol_name &lt;- &quot;Edad&quot;\r\ndf&#x5B;&#x5B;col_name]]   # Equivalente a df$Edad\r\n<\/pre>\n<div class=\"note\">\n<p>El operador <code>$<\/code> es el m\u00e1s directo y legible para acceder a columnas en an\u00e1lisis exploratorio. Sin embargo, cuando necesitas programar funciones m\u00e1s generales o din\u00e1micas, se recomienda utilizar <code>[[ ]]<\/code> o indexaci\u00f3n por posici\u00f3n.<\/p>\n<\/div>\n<h3>Acceso por \u00edndices (<code>df[i, j]<\/code>)<\/h3>\n<p>El sistema de indexaci\u00f3n <code>[i, j]<\/code> es una de las formas m\u00e1s flexibles y poderosas para acceder a datos dentro de un <code>data.frame<\/code>. Esta notaci\u00f3n se basa en filas (<code>i<\/code>) y columnas (<code>j<\/code>), de manera similar a c\u00f3mo se accede a los elementos de una matriz.<\/p>\n<p>La sintaxis general es:<\/p>\n<pre><code class=\"language-text\">df[fila, columna]<\/code><\/pre>\n<p>Donde:<\/p>\n<ul>\n<li><code>fila<\/code> puede ser un n\u00famero, un vector de n\u00fameros, un nombre de fila, un vector l\u00f3gico o <code>NULL<\/code>.<\/li>\n<li><code>columna<\/code> puede ser un n\u00famero, un nombre entre comillas, un vector l\u00f3gico, o <code>NULL<\/code>.<\/li>\n<\/ul>\n<h4>Ejemplo de uso b\u00e1sico<\/h4>\n<pre class=\"brush: r; title: ; notranslate\" title=\"\">\r\ndf &lt;- data.frame(\r\n  ID = 1:3,\r\n  Nombre = c(&quot;Ana&quot;, &quot;Luis&quot;, &quot;Mar\u00eda&quot;),\r\n  Edad = c(28, 34, 25)\r\n)\r\n\r\n# Acceder al valor en fila 2, columna 3\r\ndf&#x5B;2, 3]\r\n\r\n# Acceder a toda la fila 2\r\ndf&#x5B;2, ]\r\n\r\n# Acceder a toda la columna 1\r\ndf&#x5B;, 1]\r\n<\/pre>\n<h4>Selecci\u00f3n m\u00faltiple<\/h4>\n<p>Tambi\u00e9n es posible seleccionar subconjuntos:<\/p>\n<pre class=\"brush: r; title: ; notranslate\" title=\"\">\r\n# Seleccionar filas 1 y 3, columnas 1 y 2\r\ndf&#x5B;c(1, 3), c(1, 2)]\r\n<\/pre>\n<h4>Selecci\u00f3n por nombre<\/h4>\n<pre class=\"brush: r; title: ; notranslate\" title=\"\">\r\n# Acceder a la columna &#039;Edad&#039; usando nombre\r\ndf&#x5B;, &quot;Edad&quot;]\r\n\r\n# Acceder a una celda espec\u00edfica por nombre\r\ndf&#x5B;&quot;Luis&quot;, &quot;Edad&quot;]  # Si row.names est\u00e1n definidos\r\n<\/pre>\n<h4>Filtrado condicional con indexaci\u00f3n<\/h4>\n<pre class=\"brush: r; title: ; notranslate\" title=\"\">\r\n# Filtrar filas donde Edad sea mayor a 30\r\ndf&#x5B;df$Edad &gt; 30, ]\r\n<\/pre>\n<h4>Advertencias comunes<\/h4>\n<ul>\n<li>\u26a0\ufe0f Si omites <code>,<\/code> y usas <code>df[2]<\/code>, obtendr\u00e1s un <code>data.frame<\/code> con una sola columna, no un valor escalar ni vector.<\/li>\n<li>\u26a0\ufe0f Si usas <code>drop = TRUE<\/code> (por defecto), R puede devolver un vector en lugar de un <code>data.frame<\/code>. Usa <code>drop = FALSE<\/code> si quieres mantener estructura tabular.<\/li>\n<\/ul>\n<pre class=\"brush: r; title: ; notranslate\" title=\"\">\r\n# Mantener estructura de data.frame al seleccionar una sola columna\r\ndf&#x5B;, &quot;Edad&quot;, drop = FALSE]\r\n<\/pre>\n<div class=\"note\">\n<p>El acceso por \u00edndices es fundamental para crear scripts program\u00e1ticos y condicionales, ya que permite una precisi\u00f3n quir\u00fargica sobre los datos sin depender de nombres fijos ni operadores especiales.<\/p>\n<\/div>\n<h3>Uso del operador <code>[[ ]]<\/code> y <code>[ ]<\/code><\/h3>\n<p>Adem\u00e1s de los corchetes dobles <code>[i, j]<\/code> y el operador <code>$<\/code>, R ofrece otros dos mecanismos de acceso que tienen comportamientos distintos y muy \u00fatiles: <code>[ ]<\/code> y <code>[[ ]]<\/code>.<\/p>\n<h4>Uso de <code>[ ]<\/code> con una dimensi\u00f3n<\/h4>\n<p>Cuando usas un solo \u00edndice (por ejemplo, <code>df[1]<\/code>), el resultado es un <code>data.frame<\/code> con una sola columna, no un vector. Esto es \u00fatil si quieres mantener la estructura tabular, aunque contenga solo una variable.<\/p>\n<pre class=\"brush: r; title: ; notranslate\" title=\"\">\r\n# Seleccionar la primera columna como data.frame\r\ndf&#x5B;1]\r\n\r\n# Seleccionar varias columnas como nuevo data.frame\r\ndf&#x5B;c(&quot;ID&quot;, &quot;Edad&quot;)]\r\n<\/pre>\n<h4>Uso de <code>[[ ]]<\/code> para extraer vectores<\/h4>\n<p>El operador <code>[[ ]]<\/code> sirve para extraer una \u00fanica columna de un <code>data.frame<\/code> como un vector puro. Es \u00fatil para c\u00e1lculos o manipulaciones donde no necesitas mantener la estructura de tabla.<\/p>\n<pre class=\"brush: r; title: ; notranslate\" title=\"\">\r\n# Extraer columna como vector\r\nedad_vector &lt;- df&#x5B;&#x5B;&quot;Edad&quot;]]\r\n\r\n# Equivalente a df$Edad, pero program\u00e1ticamente m\u00e1s robusto\r\ncol &lt;- &quot;Edad&quot;\r\ndf&#x5B;&#x5B;col]]\r\n<\/pre>\n<h4>Diferencia clave entre <code>[ ]<\/code> y <code>[[ ]]<\/code><\/h4>\n<table class=\"table-limites\">\n<thead>\n<tr>\n<th>Operador<\/th>\n<th>Resultado<\/th>\n<th>Tipo<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>df[\"Edad\"]<\/code><\/td>\n<td>Columna como <code>data.frame<\/code><\/td>\n<td>Clase <code>data.frame<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>df[[\"Edad\"]]<\/code><\/td>\n<td>Columna como vector<\/td>\n<td>Clase <code>numeric<\/code> (o el tipo correspondiente)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4>Acceso a elementos individuales<\/h4>\n<p>Tambi\u00e9n puedes combinar ambos niveles para acceder directamente a un valor escalar:<\/p>\n<pre class=\"brush: r; title: ; notranslate\" title=\"\">\r\n# Valor de la segunda fila, columna &quot;Edad&quot;\r\ndf&#x5B;&#x5B;&quot;Edad&quot;]]&#x5B;2]\r\n<\/pre>\n<h4>Recomendaciones pr\u00e1cticas<\/h4>\n<ul>\n<li>\u2705 Usa <code>[ ]<\/code> cuando necesites preservar formato tabular (por ejemplo, para pasar datos a funciones que requieren data.frames).<\/li>\n<li>\u2705 Usa <code>[[ ]]<\/code> cuando necesites trabajar con vectores directamente (por ejemplo, sumar, filtrar, mapear).<\/li>\n<\/ul>\n<div class=\"note\">\n<p>Dominar estos dos operadores y sus diferencias es esencial para escribir c\u00f3digo robusto y reutilizable en R. Saber cu\u00e1ndo se obtiene un vector versus un <code>data.frame<\/code> puede prevenir muchos errores comunes.<\/p>\n<\/div>\n<p><a name=\"4\"><\/a><\/p>\n<h2>Modificaci\u00f3n de data.frames<\/h2>\n<h3>Renombrar columnas<\/h3>\n<p>Una de las tareas m\u00e1s comunes al trabajar con <code>data.frames<\/code> es <strong>renombrar las columnas<\/strong> para que tengan nombres m\u00e1s descriptivos, legibles o compatibles con otros sistemas.<\/p>\n<h4>Opci\u00f3n 1: Usar <code>names()<\/code> o <code>colnames()<\/code><\/h4>\n<p>Estas funciones permiten acceder y modificar directamente el vector de nombres de las columnas. Puedes asignar un vector nuevo completo, o cambiar nombres individualmente.<\/p>\n<pre class=\"brush: r; title: ; notranslate\" title=\"\">\r\n# Crear data.frame original\r\ndf &lt;- data.frame(A = 1:3, B = letters&#x5B;1:3])\r\n\r\n# Renombrar todas las columnas\r\nnames(df) &lt;- c(&quot;Numero&quot;, &quot;Letra&quot;)\r\n\r\n# Alternativa equivalente\r\ncolnames(df) &lt;- c(&quot;Numero&quot;, &quot;Letra&quot;)\r\n\r\n# Renombrar una sola columna por \u00edndice\r\nnames(df)&#x5B;1] &lt;- &quot;ID&quot;\r\n<\/pre>\n<p>Despu\u00e9s de la modificaci\u00f3n, el <code>data.frame<\/code> se ver\u00e1 as\u00ed:<\/p>\n<pre>\r\n    ID Letra\r\n1    1     a\r\n2    2     b\r\n3    3     c\r\n<\/pre>\n<h4>Opci\u00f3n 2: Usar <code>setNames()<\/code><\/h4>\n<p>La funci\u00f3n <code>setNames()<\/code> puede usarse para asignar nombres en una sola expresi\u00f3n sin modificar el objeto original directamente.<\/p>\n<pre class=\"brush: r; title: ; notranslate\" title=\"\">\r\ndf &lt;- setNames(df, c(&quot;Identificador&quot;, &quot;Letra&quot;))\r\n<\/pre>\n<h4>Advertencia<\/h4>\n<div class=\"note\">\n<p>Si el n\u00famero de nuevos nombres no coincide exactamente con el n\u00famero de columnas, R generar\u00e1 un error. Adem\u00e1s, evita usar nombres duplicados o vac\u00edos, ya que pueden generar problemas de ambig\u00fcedad o accesibilidad.<\/p>\n<\/div>\n<h3>Agregar nuevas columnas o filas<\/h3>\n<h4>Agregar columnas<\/h4>\n<p>Existen dos formas comunes para agregar una nueva columna a un <code>data.frame<\/code>:<\/p>\n<ul>\n<li>Usar el operador <code>$<\/code> para asignar directamente.<\/li>\n<li>Usar la funci\u00f3n <code>cbind()<\/code> para combinar por columnas.<\/li>\n<\/ul>\n<h5>Ejemplo: agregar columna con operador <code>$<\/code><\/h5>\n<pre class=\"brush: r; title: ; notranslate\" title=\"\">\r\nventas &lt;- data.frame(producto = c(&quot;A&quot;, &quot;B&quot;), precio = c(100, 200))\r\n\r\n# Agregar nueva columna\r\nventas$cantidad &lt;- c(5, 10)\r\n\r\n# Calcular columna derivada\r\nventas$total &lt;- ventas$precio * ventas$cantidad\r\n<\/pre>\n<p>Resultado:<\/p>\n<pre>\r\n  producto precio cantidad total\r\n1        A    100        5   500\r\n2        B    200       10  2000\r\n<\/pre>\n<h5>Ejemplo: agregar columna con <code>cbind()<\/code><\/h5>\n<pre class=\"brush: r; title: ; notranslate\" title=\"\">\r\nventas &lt;- cbind(ventas, descuento = c(0.1, 0.2))\r\n<\/pre>\n<p>Ten en cuenta que <code>cbind()<\/code> puede ser menos seguro si los vectores no tienen la misma longitud o si los nombres no coinciden. En general, se recomienda el uso de <code>$<\/code> por claridad y control.<\/p>\n<h4>Agregar filas<\/h4>\n<p>Para agregar nuevas observaciones (filas), puedes usar la funci\u00f3n <code>rbind()<\/code>. El nuevo objeto debe ser un <code>data.frame<\/code> con exactamente las mismas columnas (y tipos) que el original.<\/p>\n<h5>Ejemplo: agregar una nueva fila<\/h5>\n<pre class=\"brush: r; title: ; notranslate\" title=\"\">\r\nnueva_fila &lt;- data.frame(producto = &quot;C&quot;, precio = 150, cantidad = 7, total = 1050)\r\nventas &lt;- rbind(ventas, nueva_fila)\r\n<\/pre>\n<p>Resultado:<\/p>\n<pre>\r\n  producto precio cantidad total\r\n1        A    100        5   500\r\n2        B    200       10  2000\r\n3        C    150        7  1050\r\n<\/pre>\n<h4>Advertencias y buenas pr\u00e1cticas<\/h4>\n<ul>\n<li>\u2705 Siempre aseg\u00farate de que las columnas est\u00e9n en el mismo orden y con los mismos nombres al usar <code>rbind()<\/code>.<\/li>\n<li>\u26a0\ufe0f Las diferencias en tipos (por ejemplo, <code>integer<\/code> vs <code>numeric<\/code>) pueden causar coerci\u00f3n o errores.<\/li>\n<li>\u2705 Cuando agregues muchas filas de forma iterativa, es m\u00e1s eficiente usar listas y convertirlas al final en un solo <code>data.frame<\/code> (por rendimiento).<\/li>\n<\/ul>\n<div class=\"note\">\n<p>Agregar columnas es directo y eficiente; agregar filas requiere precauci\u00f3n con la estructura. En flujos de trabajo modernos se recomienda usar funciones vectorizadas o paquetes como <code>dplyr::bind_rows()<\/code> para una mayor robustez.<\/p>\n<\/div>\n<h3>Eliminar columnas o filas<\/h3>\n<p>En R, puedes eliminar columnas o filas de un <code>data.frame<\/code> de manera directa utilizando <strong>\u00edndices negativos<\/strong> o asignando <code>NULL<\/code> a una columna espec\u00edfica. Ambos m\u00e9todos son eficientes y se utilizan en diferentes contextos.<\/p>\n<h4>Eliminar columnas<\/h4>\n<h5>Opci\u00f3n 1: Asignar <code>NULL<\/code><\/h5>\n<p>Este m\u00e9todo es claro y expresivo: al asignar <code>NULL<\/code> a una columna, la eliminas del <code>data.frame<\/code>.<\/p>\n<pre class=\"brush: r; title: ; notranslate\" title=\"\">\r\nventas &lt;- data.frame(producto = c(&quot;A&quot;, &quot;B&quot;),\r\n                     precio = c(100, 200),\r\n                     cantidad = c(5, 10),\r\n                     total = c(500, 2000))\r\n\r\n# Eliminar la columna &#039;total&#039;\r\nventas$total &lt;- NULL\r\n<\/pre>\n<p>Resultado:<\/p>\n<pre>\r\n  producto precio cantidad\r\n1        A    100        5\r\n2        B    200       10\r\n<\/pre>\n<h5>Opci\u00f3n 2: Usar \u00edndices negativos<\/h5>\n<p>Puedes usar el operador de indexaci\u00f3n para excluir una o m\u00e1s columnas por su posici\u00f3n o nombre.<\/p>\n<pre class=\"brush: r; title: ; notranslate\" title=\"\">\r\n# Eliminar la tercera columna\r\nventas &lt;- ventas&#x5B;, -3]\r\n\r\n# O eliminar por nombre\r\nventas &lt;- ventas&#x5B;, !names(ventas) %in% &quot;cantidad&quot;]\r\n<\/pre>\n<h4>Eliminar filas<\/h4>\n<p>Eliminar filas sigue la misma l\u00f3gica, pero se aplica al primer \u00edndice (<code>i<\/code>) del <code>data.frame<\/code>.<\/p>\n<pre class=\"brush: r; title: ; notranslate\" title=\"\">\r\n# Eliminar la primera fila\r\nventas &lt;- ventas&#x5B;-1, ]\r\n<\/pre>\n<p>Resultado:<\/p>\n<pre>\r\n  producto precio\r\n2        B    200\r\n<\/pre>\n<h4>Eliminar m\u00faltiples filas o columnas<\/h4>\n<p>Puedes eliminar varias filas o columnas pasando un vector de \u00edndices negativos:<\/p>\n<pre class=\"brush: r; title: ; notranslate\" title=\"\">\r\n# Eliminar filas 1 y 3\r\ndf &lt;- df&#x5B;-c(1, 3), ]\r\n\r\n# Eliminar columnas 2 y 4\r\ndf &lt;- df&#x5B;, -c(2, 4)]\r\n<\/pre>\n<h4>Advertencias<\/h4>\n<ul>\n<li>\u26a0\ufe0f No olvides reasignar el resultado: la operaci\u00f3n no modifica el objeto original a menos que lo guardes de nuevo.<\/li>\n<li>\u26a0\ufe0f Eliminar columnas por \u00edndice puede ser peligroso si el orden cambia. Usar nombres suele ser m\u00e1s robusto.<\/li>\n<\/ul>\n<div class=\"note\">\n<p>Eliminar columnas y filas es una operaci\u00f3n b\u00e1sica pero poderosa. Aseg\u00farate de documentar bien tu c\u00f3digo para no perder informaci\u00f3n cr\u00edtica por accidente.<\/p>\n<\/div>\n<h3>Transformaciones elementales sobre columnas<\/h3>\n<p>Una transformaci\u00f3n elemental consiste en modificar los valores de una columna existente, o crear nuevas columnas a partir de operaciones matem\u00e1ticas, l\u00f3gicas o textuales sobre una o m\u00e1s columnas del <code>data.frame<\/code>.<\/p>\n<h4>Asignaci\u00f3n directa<\/h4>\n<p>Puedes modificar una columna directamente usando el operador <code>$<\/code>, o bien a\u00f1adir nuevas variables a partir de c\u00e1lculos simples.<\/p>\n<pre class=\"brush: r; title: ; notranslate\" title=\"\">\r\n# Aplicar IVA del 19%\r\nventas$precio &lt;- ventas$precio * 1.19\r\n<\/pre>\n<h4>Crear columnas derivadas<\/h4>\n<p>Es com\u00fan derivar columnas que representen transformaciones \u00fatiles para el an\u00e1lisis.<\/p>\n<pre class=\"brush: r; title: ; notranslate\" title=\"\">\r\nventas$precio_con_descuento &lt;- ventas$precio * 0.90\r\nventas$importe_final &lt;- ventas$precio_con_descuento * ventas$cantidad\r\n<\/pre>\n<h4>Uso de la funci\u00f3n <code>transform()<\/code><\/h4>\n<p>Para realizar m\u00faltiples transformaciones simult\u00e1neamente, puedes usar <code>transform()<\/code>, lo cual mejora la legibilidad:<\/p>\n<pre class=\"brush: r; title: ; notranslate\" title=\"\">\r\nventas &lt;- transform(ventas,\r\n                    precio_sin_iva = precio \/ 1.19,\r\n                    importe_total = precio * cantidad)\r\n<\/pre>\n<h4>Funciones comunes para transformar columnas<\/h4>\n<ul>\n<li><code>round()<\/code>, <code>ceiling()<\/code>, <code>floor()<\/code>: redondeos.<\/li>\n<li><code>paste()<\/code>, <code>substr()<\/code>: manipulaci\u00f3n de texto.<\/li>\n<li><code>as.numeric()<\/code>, <code>as.character()<\/code>: conversiones de tipo.<\/li>\n<li><code>ifelse()<\/code>: condiciones l\u00f3gicas para crear categor\u00edas.<\/li>\n<\/ul>\n<h4>Ejemplo con condiciones<\/h4>\n<pre class=\"brush: r; title: ; notranslate\" title=\"\">\r\n# Clasificar productos como &quot;caro&quot; o &quot;barato&quot;\r\nventas$clasificacion &lt;- ifelse(ventas$precio &gt; 150, &quot;caro&quot;, &quot;barato&quot;)\r\n<\/pre>\n<h4>Buenas pr\u00e1cticas<\/h4>\n<ul>\n<li>\u2705 Utiliza nombres descriptivos para las nuevas columnas.<\/li>\n<li>\u2705 Verifica los tipos de datos antes de aplicar transformaciones.<\/li>\n<li>\u2705 Prefiere transformaciones vectorizadas en lugar de bucles para eficiencia.<\/li>\n<\/ul>\n<div class=\"note\">\n<p>Transformar columnas es una operaci\u00f3n esencial para el an\u00e1lisis exploratorio y la preparaci\u00f3n de datos. Comienza con operaciones b\u00e1sicas y luego avanza a funciones como <code>mutate()<\/code> del paquete <code>dplyr<\/code> para mayor expresividad.<\/p>\n<\/div>\n<p><a name=\"4\"><\/a><\/p>\n<h2>Ejercicios propuestos: Acceso y modificaci\u00f3n de data.frames<\/h2>\n<h3>Ejercicio 1: An\u00e1lisis de notas acad\u00e9micas<\/h3>\n<p>Sup\u00f3n que est\u00e1s trabajando con un conjunto de datos de estudiantes que contiene las columnas: <code>Nombre<\/code>, <code>Asignatura<\/code>, <code>Nota1<\/code>, <code>Nota2<\/code> y <code>Nota3<\/code>.<\/p>\n<pre class=\"brush: r; title: ; notranslate\" title=\"\">\r\nnotas &lt;- data.frame(\r\n  Nombre = c(&quot;Ana&quot;, &quot;Luis&quot;, &quot;Mar\u00eda&quot;, &quot;Jorge&quot;),\r\n  Asignatura = c(&quot;Matem\u00e1ticas&quot;, &quot;Matem\u00e1ticas&quot;, &quot;F\u00edsica&quot;, &quot;F\u00edsica&quot;),\r\n  Nota1 = c(5.5, 6.2, 4.8, 7.0),\r\n  Nota2 = c(6.0, 5.9, 5.5, 6.5),\r\n  Nota3 = c(5.8, 6.4, 6.1, 6.9)\r\n)\r\n<\/pre>\n<ul>\n<li>Accede a todas las notas de Mar\u00eda y calcula su promedio individual usando acceso por nombre.<\/li>\n<li>Crea una nueva columna <code>Promedio<\/code> con el promedio de las tres notas para cada estudiante.<\/li>\n<li>Agrega una columna <code>Estado<\/code> que indique si el estudiante aprob\u00f3 (promedio \u2265 5.5) o reprob\u00f3.<\/li>\n<li>Filtra el <code>data.frame<\/code> para mostrar solo los estudiantes que aprobaron F\u00edsica con promedio superior a 6.0.<\/li>\n<\/ul>\n<h3>Ejercicio 2: Gesti\u00f3n de inventario de productos<\/h3>\n<p>Trabajas en una tienda y tienes el siguiente inventario:<\/p>\n<pre class=\"brush: r; title: ; notranslate\" title=\"\">\r\ninventario &lt;- data.frame(\r\n  Producto = c(&quot;A&quot;, &quot;B&quot;, &quot;C&quot;),\r\n  PrecioUnitario = c(1200, 850, 1500),\r\n  Stock = c(15, 8, 0)\r\n)\r\n<\/pre>\n<ul>\n<li>Agrega una columna <code>Disponible<\/code> que indique <code>TRUE<\/code> si el stock es mayor que cero.<\/li>\n<li>Agrega otra columna <code>ValorTotal<\/code> que calcule el valor monetario total de cada producto en stock.<\/li>\n<li>Actualiza el precio del producto <code>B<\/code> aumentando un 10%, usando acceso por nombre.<\/li>\n<li>Elimina del <code>data.frame<\/code> todos los productos sin stock.<\/li>\n<\/ul>\n<h3>Ejercicio 3: Construcci\u00f3n de reporte con transformaci\u00f3n estructurada<\/h3>\n<p>Usando el <code>data.frame<\/code> del ejercicio anterior (actualizado), realiza lo siguiente:<\/p>\n<ul>\n<li>Renombra las columnas en espa\u00f1ol por nombres m\u00e1s t\u00e9cnicos en ingl\u00e9s: <code>Producto<\/code> \u2192 <code>Item<\/code>, <code>PrecioUnitario<\/code> \u2192 <code>UnitPrice<\/code>, etc.<\/li>\n<li>Usa <code>transform()<\/code> para crear simult\u00e1neamente las siguientes columnas:\n<ul>\n<li><code>PrecioConIVA<\/code>: precio con un IVA del 19%<\/li>\n<li><code>ValorBruto<\/code>: stock multiplicado por el precio sin IVA<\/li>\n<\/ul>\n<\/li>\n<li>Extrae como vector puro los precios con IVA mediante el operador <code>[[ ]]<\/code> y calcula su promedio.<\/li>\n<\/ul>\n<div class=\"note\">\n<p>Estos ejercicios est\u00e1n enfocados en fomentar el pensamiento anal\u00edtico sobre estructuras de datos en R. En lugar de enfocarse en t\u00e9cnicas aisladas, integran m\u00faltiples operaciones en contextos realistas que reflejan tareas comunes en an\u00e1lisis de datos.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Creaci\u00f3n y Manipulaci\u00f3n de data.frames en R En esta lecci\u00f3n aprender\u00e1s todo lo necesario para trabajar con data.frames en R: c\u00f3mo crearlos, explorarlos, modificarlos y acceder a su contenido con precisi\u00f3n. A trav\u00e9s de ejemplos claros y explicaciones directas, dominar\u00e1s la estructura de datos m\u00e1s usada en an\u00e1lisis estad\u00edstico y te preparar\u00e1s para dar el [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":32990,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":246,"footnotes":""},"categories":[1164,973],"tags":[],"class_list":["post-32964","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-analisis-de-datos-con-r","category-computacion-e-informatica"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Creaci\u00f3n y Manipulaci\u00f3n de data.frames en R - toposuranos.com\/material<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/toposuranos.com\/material\/es\/creacion-y-manipulacion-de-data-frames-en-r\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Creaci\u00f3n y Manipulaci\u00f3n de data.frames en R - toposuranos.com\/material\" \/>\n<meta property=\"og:description\" content=\"Creaci\u00f3n y Manipulaci\u00f3n de data.frames en R En esta lecci\u00f3n aprender\u00e1s todo lo necesario para trabajar con data.frames en R: c\u00f3mo crearlos, explorarlos, modificarlos y acceder a su contenido con precisi\u00f3n. A trav\u00e9s de ejemplos claros y explicaciones directas, dominar\u00e1s la estructura de datos m\u00e1s usada en an\u00e1lisis estad\u00edstico y te preparar\u00e1s para dar el [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/toposuranos.com\/material\/es\/creacion-y-manipulacion-de-data-frames-en-r\/\" \/>\n<meta property=\"og:site_name\" content=\"toposuranos.com\/material\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/groups\/toposuranos\" \/>\n<meta property=\"article:published_time\" content=\"2025-05-05T21:01:08+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-05-13T22:56:04+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/toposuranos.com\/material\/wp-content\/uploads\/2025\/05\/dataframe-e1747168529474.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1536\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"giorgio.reveco\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@topuranos\" \/>\n<meta name=\"twitter:site\" content=\"@topuranos\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"giorgio.reveco\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"18 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/toposuranos.com\\\/material\\\/es\\\/creacion-y-manipulacion-de-data-frames-en-r\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/toposuranos.com\\\/material\\\/es\\\/creacion-y-manipulacion-de-data-frames-en-r\\\/\"},\"author\":{\"name\":\"giorgio.reveco\",\"@id\":\"https:\\\/\\\/toposuranos.com\\\/material\\\/#\\\/schema\\\/person\\\/e15164361c3f9a2a02cf6c234cf7fdc1\"},\"headline\":\"Creaci\u00f3n y Manipulaci\u00f3n de data.frames en R\",\"datePublished\":\"2025-05-05T21:01:08+00:00\",\"dateModified\":\"2025-05-13T22:56:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/toposuranos.com\\\/material\\\/es\\\/creacion-y-manipulacion-de-data-frames-en-r\\\/\"},\"wordCount\":4818,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/toposuranos.com\\\/material\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/toposuranos.com\\\/material\\\/es\\\/creacion-y-manipulacion-de-data-frames-en-r\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/toposuranos.com\\\/material\\\/wp-content\\\/uploads\\\/2025\\\/05\\\/dataframe-e1747168529474.jpg\",\"articleSection\":[\"An\u00e1lisis de Datos con R\",\"Computaci\u00f3n e Inform\u00e1tica\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/toposuranos.com\\\/material\\\/es\\\/creacion-y-manipulacion-de-data-frames-en-r\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/toposuranos.com\\\/material\\\/es\\\/creacion-y-manipulacion-de-data-frames-en-r\\\/\",\"url\":\"https:\\\/\\\/toposuranos.com\\\/material\\\/es\\\/creacion-y-manipulacion-de-data-frames-en-r\\\/\",\"name\":\"Creaci\u00f3n y Manipulaci\u00f3n de data.frames en R - toposuranos.com\\\/material\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/toposuranos.com\\\/material\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/toposuranos.com\\\/material\\\/es\\\/creacion-y-manipulacion-de-data-frames-en-r\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/toposuranos.com\\\/material\\\/es\\\/creacion-y-manipulacion-de-data-frames-en-r\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/toposuranos.com\\\/material\\\/wp-content\\\/uploads\\\/2025\\\/05\\\/dataframe-e1747168529474.jpg\",\"datePublished\":\"2025-05-05T21:01:08+00:00\",\"dateModified\":\"2025-05-13T22:56:04+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/toposuranos.com\\\/material\\\/es\\\/creacion-y-manipulacion-de-data-frames-en-r\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/toposuranos.com\\\/material\\\/es\\\/creacion-y-manipulacion-de-data-frames-en-r\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/toposuranos.com\\\/material\\\/es\\\/creacion-y-manipulacion-de-data-frames-en-r\\\/#primaryimage\",\"url\":\"https:\\\/\\\/toposuranos.com\\\/material\\\/wp-content\\\/uploads\\\/2025\\\/05\\\/dataframe-e1747168529474.jpg\",\"contentUrl\":\"https:\\\/\\\/toposuranos.com\\\/material\\\/wp-content\\\/uploads\\\/2025\\\/05\\\/dataframe-e1747168529474.jpg\",\"width\":1536,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/toposuranos.com\\\/material\\\/es\\\/creacion-y-manipulacion-de-data-frames-en-r\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"http:\\\/\\\/toposuranos.com\\\/material\\\/es\\\/cursos-de-matematica-y-fisica\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Creaci\u00f3n y Manipulaci\u00f3n de data.frames en R\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/toposuranos.com\\\/material\\\/#website\",\"url\":\"https:\\\/\\\/toposuranos.com\\\/material\\\/\",\"name\":\"toposuranos.com\\\/material\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/toposuranos.com\\\/material\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/toposuranos.com\\\/material\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/toposuranos.com\\\/material\\\/#organization\",\"name\":\"toposuranos.com\\\/material\",\"url\":\"https:\\\/\\\/toposuranos.com\\\/material\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/toposuranos.com\\\/material\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"http:\\\/\\\/toposuranos.com\\\/material\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/logo.png\",\"contentUrl\":\"http:\\\/\\\/toposuranos.com\\\/material\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/logo.png\",\"width\":2400,\"height\":2059,\"caption\":\"toposuranos.com\\\/material\"},\"image\":{\"@id\":\"https:\\\/\\\/toposuranos.com\\\/material\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/groups\\\/toposuranos\",\"https:\\\/\\\/x.com\\\/topuranos\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UC16yDm12cPcrwsE0fAM7X1g\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/69429190\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/toposuranos.com\\\/material\\\/#\\\/schema\\\/person\\\/e15164361c3f9a2a02cf6c234cf7fdc1\",\"name\":\"giorgio.reveco\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"http:\\\/\\\/toposuranos.com\\\/material\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/1694478625378-96x96.jpeg\",\"url\":\"http:\\\/\\\/toposuranos.com\\\/material\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/1694478625378-96x96.jpeg\",\"contentUrl\":\"http:\\\/\\\/toposuranos.com\\\/material\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/1694478625378-96x96.jpeg\",\"caption\":\"giorgio.reveco\"},\"description\":\"Soy Licenciado en F\u00edsica, Magister en Ingenier\u00eda Industrial y Docente Universitario. Me dedico a desmitificar la f\u00edsica y las matem\u00e1ticas. Mi objetivo es hacer que estos campos sean f\u00e1cilmente comprensibles para todos, proporcionando las herramientas para explorar no solo el mundo que nos rodea, sino tambi\u00e9n las profundidades de nuestra propia existencia y el orden natural que nos conecta con el cosmos.\",\"sameAs\":[\"http:\\\/\\\/toposuranos.com\\\/material\"],\"url\":\"https:\\\/\\\/toposuranos.com\\\/material\\\/author\\\/giorgio-reveco\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Creaci\u00f3n y Manipulaci\u00f3n de data.frames en R - toposuranos.com\/material","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/toposuranos.com\/material\/es\/creacion-y-manipulacion-de-data-frames-en-r\/","og_locale":"es_ES","og_type":"article","og_title":"Creaci\u00f3n y Manipulaci\u00f3n de data.frames en R - toposuranos.com\/material","og_description":"Creaci\u00f3n y Manipulaci\u00f3n de data.frames en R En esta lecci\u00f3n aprender\u00e1s todo lo necesario para trabajar con data.frames en R: c\u00f3mo crearlos, explorarlos, modificarlos y acceder a su contenido con precisi\u00f3n. A trav\u00e9s de ejemplos claros y explicaciones directas, dominar\u00e1s la estructura de datos m\u00e1s usada en an\u00e1lisis estad\u00edstico y te preparar\u00e1s para dar el [&hellip;]","og_url":"https:\/\/toposuranos.com\/material\/es\/creacion-y-manipulacion-de-data-frames-en-r\/","og_site_name":"toposuranos.com\/material","article_publisher":"https:\/\/www.facebook.com\/groups\/toposuranos","article_published_time":"2025-05-05T21:01:08+00:00","article_modified_time":"2025-05-13T22:56:04+00:00","og_image":[{"width":1536,"height":630,"url":"https:\/\/toposuranos.com\/material\/wp-content\/uploads\/2025\/05\/dataframe-e1747168529474.jpg","type":"image\/jpeg"}],"author":"giorgio.reveco","twitter_card":"summary_large_image","twitter_creator":"@topuranos","twitter_site":"@topuranos","twitter_misc":{"Escrito por":"giorgio.reveco","Tiempo de lectura":"18 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/toposuranos.com\/material\/es\/creacion-y-manipulacion-de-data-frames-en-r\/#article","isPartOf":{"@id":"https:\/\/toposuranos.com\/material\/es\/creacion-y-manipulacion-de-data-frames-en-r\/"},"author":{"name":"giorgio.reveco","@id":"https:\/\/toposuranos.com\/material\/#\/schema\/person\/e15164361c3f9a2a02cf6c234cf7fdc1"},"headline":"Creaci\u00f3n y Manipulaci\u00f3n de data.frames en R","datePublished":"2025-05-05T21:01:08+00:00","dateModified":"2025-05-13T22:56:04+00:00","mainEntityOfPage":{"@id":"https:\/\/toposuranos.com\/material\/es\/creacion-y-manipulacion-de-data-frames-en-r\/"},"wordCount":4818,"commentCount":0,"publisher":{"@id":"https:\/\/toposuranos.com\/material\/#organization"},"image":{"@id":"https:\/\/toposuranos.com\/material\/es\/creacion-y-manipulacion-de-data-frames-en-r\/#primaryimage"},"thumbnailUrl":"https:\/\/toposuranos.com\/material\/wp-content\/uploads\/2025\/05\/dataframe-e1747168529474.jpg","articleSection":["An\u00e1lisis de Datos con R","Computaci\u00f3n e Inform\u00e1tica"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/toposuranos.com\/material\/es\/creacion-y-manipulacion-de-data-frames-en-r\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/toposuranos.com\/material\/es\/creacion-y-manipulacion-de-data-frames-en-r\/","url":"https:\/\/toposuranos.com\/material\/es\/creacion-y-manipulacion-de-data-frames-en-r\/","name":"Creaci\u00f3n y Manipulaci\u00f3n de data.frames en R - toposuranos.com\/material","isPartOf":{"@id":"https:\/\/toposuranos.com\/material\/#website"},"primaryImageOfPage":{"@id":"https:\/\/toposuranos.com\/material\/es\/creacion-y-manipulacion-de-data-frames-en-r\/#primaryimage"},"image":{"@id":"https:\/\/toposuranos.com\/material\/es\/creacion-y-manipulacion-de-data-frames-en-r\/#primaryimage"},"thumbnailUrl":"https:\/\/toposuranos.com\/material\/wp-content\/uploads\/2025\/05\/dataframe-e1747168529474.jpg","datePublished":"2025-05-05T21:01:08+00:00","dateModified":"2025-05-13T22:56:04+00:00","breadcrumb":{"@id":"https:\/\/toposuranos.com\/material\/es\/creacion-y-manipulacion-de-data-frames-en-r\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/toposuranos.com\/material\/es\/creacion-y-manipulacion-de-data-frames-en-r\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/toposuranos.com\/material\/es\/creacion-y-manipulacion-de-data-frames-en-r\/#primaryimage","url":"https:\/\/toposuranos.com\/material\/wp-content\/uploads\/2025\/05\/dataframe-e1747168529474.jpg","contentUrl":"https:\/\/toposuranos.com\/material\/wp-content\/uploads\/2025\/05\/dataframe-e1747168529474.jpg","width":1536,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/toposuranos.com\/material\/es\/creacion-y-manipulacion-de-data-frames-en-r\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"http:\/\/toposuranos.com\/material\/es\/cursos-de-matematica-y-fisica\/"},{"@type":"ListItem","position":2,"name":"Creaci\u00f3n y Manipulaci\u00f3n de data.frames en R"}]},{"@type":"WebSite","@id":"https:\/\/toposuranos.com\/material\/#website","url":"https:\/\/toposuranos.com\/material\/","name":"toposuranos.com\/material","description":"","publisher":{"@id":"https:\/\/toposuranos.com\/material\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/toposuranos.com\/material\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/toposuranos.com\/material\/#organization","name":"toposuranos.com\/material","url":"https:\/\/toposuranos.com\/material\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/toposuranos.com\/material\/#\/schema\/logo\/image\/","url":"http:\/\/toposuranos.com\/material\/wp-content\/uploads\/2023\/10\/logo.png","contentUrl":"http:\/\/toposuranos.com\/material\/wp-content\/uploads\/2023\/10\/logo.png","width":2400,"height":2059,"caption":"toposuranos.com\/material"},"image":{"@id":"https:\/\/toposuranos.com\/material\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/groups\/toposuranos","https:\/\/x.com\/topuranos","https:\/\/www.youtube.com\/channel\/UC16yDm12cPcrwsE0fAM7X1g","https:\/\/www.linkedin.com\/company\/69429190"]},{"@type":"Person","@id":"https:\/\/toposuranos.com\/material\/#\/schema\/person\/e15164361c3f9a2a02cf6c234cf7fdc1","name":"giorgio.reveco","image":{"@type":"ImageObject","inLanguage":"es","@id":"http:\/\/toposuranos.com\/material\/wp-content\/uploads\/2023\/10\/1694478625378-96x96.jpeg","url":"http:\/\/toposuranos.com\/material\/wp-content\/uploads\/2023\/10\/1694478625378-96x96.jpeg","contentUrl":"http:\/\/toposuranos.com\/material\/wp-content\/uploads\/2023\/10\/1694478625378-96x96.jpeg","caption":"giorgio.reveco"},"description":"Soy Licenciado en F\u00edsica, Magister en Ingenier\u00eda Industrial y Docente Universitario. Me dedico a desmitificar la f\u00edsica y las matem\u00e1ticas. Mi objetivo es hacer que estos campos sean f\u00e1cilmente comprensibles para todos, proporcionando las herramientas para explorar no solo el mundo que nos rodea, sino tambi\u00e9n las profundidades de nuestra propia existencia y el orden natural que nos conecta con el cosmos.","sameAs":["http:\/\/toposuranos.com\/material"],"url":"https:\/\/toposuranos.com\/material\/author\/giorgio-reveco\/"}]}},"_links":{"self":[{"href":"https:\/\/toposuranos.com\/material\/wp-json\/wp\/v2\/posts\/32964","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/toposuranos.com\/material\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/toposuranos.com\/material\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/toposuranos.com\/material\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/toposuranos.com\/material\/wp-json\/wp\/v2\/comments?post=32964"}],"version-history":[{"count":0,"href":"https:\/\/toposuranos.com\/material\/wp-json\/wp\/v2\/posts\/32964\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/toposuranos.com\/material\/wp-json\/wp\/v2\/media\/32990"}],"wp:attachment":[{"href":"https:\/\/toposuranos.com\/material\/wp-json\/wp\/v2\/media?parent=32964"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/toposuranos.com\/material\/wp-json\/wp\/v2\/categories?post=32964"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/toposuranos.com\/material\/wp-json\/wp\/v2\/tags?post=32964"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}