Main Content

Acceder a datos en tablas

Una tabla es un contenedor que almacena datos orientados a columnas en variables. Las variables de tabla pueden tener datos de distintos tipos y tamaños, siempre y cuando todas tengan el mismo número de filas. Las variables de tabla tienen nombres, al igual que los campos de una estructura. Las filas de una tabla pueden tener nombres, pero no es obligatorio. Para acceder a los datos de la tabla o modificarlos, indexe en las filas y las variables por sus nombres o índices numéricos.

Algunos motivos típicos por los que indexar en tablas son:

  • Reordenar o eliminar filas y variables.

  • Añadir arreglos como nuevas filas o variables.

  • Extraer arreglos de datos para usarlos como argumentos de entrada para funciones.

Otra forma de acceder a los datos de una tabla o modificarlos es abrirla en el editor de variables para la edición gráfica. Para abrir una tabla, haga doble clic en el explorador del área de trabajo o utilice la función openvar.

Resumen de las sintaxis para indexar tablas

En función del tipo de indexación que utilice, puede acceder tanto a una subtabla como a un arreglo extraído de la tabla. Indexación con:

  • Paréntesis, (), devuelve una tabla con filas y variables seleccionadas.

  • Notación de puntos devuelve el contenido de una variable como un arreglo.

  • Llaves, {}, devuelve un arreglo concatenado a partir del contenido de filas y variables seleccionadas.

Puede especificar filas y variables por nombre, índice numérico o tipo de datos.

  • A partir de la versión R2019b, los nombres de las variables y de las filas pueden incluir todos los caracteres, incluidos espacios y caracteres no ASCII. También pueden empezar por cualquier carácter, no solo por letras. Los nombres de variables y filas no tienen que ser identificadores de MATLAB® válidos (según la función isvarname).

  • A partir de la versión R2022a, cuando especifique filas y variables por nombre, puede usar un objeto pattern para especificar los nombres. Por ejemplo, "Var" + digitsPattern coincide con todos los nombres que empiecen por Var y terminen con dígitos.

Tipo de salida

Sintaxis

Filas

Variables

Ejemplos

Tabla que contiene filas y variables especificadas

T(rows,vars)

Especificaciones:

  • Número de filas (entre 1 y m)

  • Arreglo lógico con m elementos

  • Nombres, si T tiene nombres de filas

  • Horas, si T es un horario

  • Dos puntos (:), para todas las filas

Especificaciones:

  • Número de variables (entre 1 y n)

  • Arreglo lógico con n elementos

  • Nombres

  • Dos puntos (:), para todas las variables

  • T(1:5,[1 4 5])

    Tabla con las primeras cinco filas y la primera, cuarta y quinta variables de T

  • T(1:5,[true false false true true])

    Tabla con las primeras cinco filas y la primera, cuarta y quinta variables de T

  • T(:,["A","B"])

    Tabla con todas las filas y variables con nombres A y B

  • T(:,"A" + wildcardPattern)

    Tabla con todas las filas y variables cuyo nombre empieza por A

Tabla con las variables que tienen un tipo de datos especificado

S = vartype(type);

T(rows,S)

Especificaciones:

  • Número de filas (entre 1 y m)

  • Arreglo lógico con m elementos

  • Nombres, si T tiene nombres de filas

  • Horas, si T es un horario

  • Dos puntos (:), para todas las filas

Especificado como tipo de datos, como "numeric", "categorical" o "datetime"

  • S = vartype("numeric");

    T(1:5,S)

    Tabla con las primeras cinco filas y las variables numéricas de T

Arreglo con datos extraídos de una variable

T.var

T.(expression)

Sin especificar

Especificaciones:

  • El nombre de una variable (sin comillas)

  • Una expresión entre paréntesis que devuelve el nombre o el número de una variable

  • T.Date

    Arreglo extraído de la variable de tabla llamada Date

  • T.("2019/06/30")

    Arreglo extraído de la variable de tabla llamada 2019/06/30

  • T.(1)

    Arreglo extraído de la primera variable de tabla

Arreglo con datos extraídos de una variable y de filas específicas

T.var(rows)

T.(expression)(rows)

Especificado como índices numéricos o lógicos del arreglo

Especificaciones:

  • El nombre de una variable (sin comillas)

  • Una expresión entre paréntesis que devuelve el nombre o el número de una variable

  • T.Date(1:5)

    Primeras cinco filas de un arreglo extraídas de la variable de tabla llamada Date

  • T.("2019/06/30")(1:5)

    Primeras cinco filas de un arreglo extraídas de la variable de tabla llamada 2019/06/30

  • T.(1)(1:5)

    Primeras cinco filas de un arreglo extraídas de la primera variable de tabla

Arreglo que concatena datos de filas y variables especificadas

T{rows,vars}

Especificaciones:

  • Número de filas (entre 1 y m)

  • Arreglo lógico con m elementos

  • Nombres, si T tiene nombres de filas

  • Horas, si T es un horario

  • Dos puntos (:), para todas las filas

Especificaciones:

  • Número de variables (entre 1 y n)

  • Arreglo lógico con n elementos

  • Nombres

  • Dos puntos (:), para todas las variables

  • T{1:5,[1 4 5]}

    Arreglo concatenado desde las primeras cinco filas y la primera, cuarta y quinta variable de T

  • T{1:5,[true false false true true]}

    Arreglo concatenado desde las primeras cinco filas y la primera, cuarta y quinta variable de T

  • T{:,["A","B"]}

    Arreglo concatenado desde todas las filas y variables con nombres A y B

  • T{:,"A" + wildcardPattern}

    Arreglo concatenado a partir de todas las filas y variables cuyo nombre empieza por A

Arreglo que concatena datos de filas y variables específicas con un determinado tipo de datos

S = vartype(type);

T{rows,S}

Especificaciones:

  • Número de filas (entre 1 y m)

  • Arreglo lógico con m elementos

  • Nombres, si T tiene nombres de filas

  • Horas, si T es un horario

  • Dos puntos (:), para todas las filas

Especificado como tipo de datos, como "numeric", "categorical" o "datetime"

  • S = vartype("numeric");

    T{1:5,S}

    Arreglo concatenado a partir de las primeras cinco filas y las variables numéricas de T

Arreglo que concatena datos a partir de todas las filas y variables

T.Variables

Sin especificar

Sin especificar

  • T.Variables

    Idéntica al arreglo que ha devuelto T{:,:}

Indexación de la tabla con determinadas filas y variables

Cargue los datos de muestra de 100 pacientes desde el archivo MAT patients a las variables del área de trabajo.

load patients
whos
  Name                            Size            Bytes  Class      Attributes

  Age                           100x1               800  double               
  Diastolic                     100x1               800  double               
  Gender                        100x1             11412  cell                 
  Height                        100x1               800  double               
  LastName                      100x1             11616  cell                 
  Location                      100x1             14208  cell                 
  SelfAssessedHealthStatus      100x1             11540  cell                 
  Smoker                        100x1               100  logical              
  Systolic                      100x1               800  double               
  Weight                        100x1               800  double               

Cree una tabla y rellénela con las variables del área de trabajo Age, Height, Weight, Smoker y SelfAssessedHealthStatus. Utilice los identificadores únicos de LastName como nombres para las filas. T es una tabla de 100 por 5, con 100 filas y cinco variables. (Cuando especifica un vector de nombres de filas, no cuenta como variable de tabla). Además, convierta SelfAssessedHealthStatus a una variable categorical porque contiene solo los valores únicos Excellent, Good, Fair y Poor. Puede ser útil tratar una variable como un arreglo categorical cuando tenga un conjunto fijo de valores que pueda considerar categorías.

SelfAssessedHealthStatus = categorical(SelfAssessedHealthStatus);
T = table(Age,Height,Weight,Smoker,SelfAssessedHealthStatus,...
    'RowNames',LastName)
T=100×5 table
                Age    Height    Weight    Smoker    SelfAssessedHealthStatus
                ___    ______    ______    ______    ________________________

    Smith       38       71       176      true             Excellent        
    Johnson     43       69       163      false            Fair             
    Williams    38       64       131      false            Good             
    Jones       40       67       133      false            Fair             
    Brown       49       64       119      false            Good             
    Davis       46       68       142      false            Good             
    Miller      33       64       142      true             Good             
    Wilson      40       68       180      false            Good             
    Moore       28       68       183      false            Excellent        
    Taylor      31       66       132      false            Excellent        
    Anderson    45       68       128      false            Excellent        
    Thomas      42       66       137      false            Poor             
    Jackson     25       71       174      false            Poor             
    White       39       72       202      true             Excellent        
    Harris      36       65       129      false            Good             
    Martin      48       71       181      true             Good             
      ⋮

Indexar con índices numéricos o la palabra clave end

Cree una subtabla con las primeras cinco filas y todas las variables de T. Para especificar las filas y variables deseadas, utilice índices numéricos entre paréntesis. Este tipo de indexación es parecida a indexar en arreglos numéricos.

firstRows = T(1:5,:)
firstRows=5×5 table
                Age    Height    Weight    Smoker    SelfAssessedHealthStatus
                ___    ______    ______    ______    ________________________

    Smith       38       71       176      true             Excellent        
    Johnson     43       69       163      false            Fair             
    Williams    38       64       131      false            Good             
    Jones       40       67       133      false            Fair             
    Brown       49       64       119      false            Good             

También puede usar la palabra clave end para hacer referencia a la última fila o variable. Utilice la palabra clave end para indexar en las últimas cinco filas de la tabla.

lastRows = T(end-4:end,:)
lastRows=5×5 table
                 Age    Height    Weight    Smoker    SelfAssessedHealthStatus
                 ___    ______    ______    ______    ________________________

    Alexander    25       69       171      true                Good          
    Russell      44       69       188      true                Good          
    Griffin      49       70       186      false               Fair          
    Diaz         45       68       172      true                Good          
    Hayes        48       66       177      false               Fair          

Además de índices numéricos, puede usar nombres de variables o filas entre paréntesis. (En este caso, usar índices de filas y dos puntos es más breve que usar los nombres de las variables o filas).

Indexar con nombres

Seleccione todos los datos de los pacientes cuyos apellidos sean Griffin, Diaz y Hayes. Como T tiene nombres de filas que son los apellidos de los pacientes, indexe en T con los nombres de las filas.

rowsByName = T(["Griffin","Diaz","Hayes"],:)
rowsByName=3×5 table
               Age    Height    Weight    Smoker    SelfAssessedHealthStatus
               ___    ______    ______    ______    ________________________

    Griffin    49       70       186      false               Fair          
    Diaz       45       68       172      true                Good          
    Hayes      48       66       177      false               Fair          

También puede seleccionar variables por nombre. Cree una tabla que contenga solo las cinco primeras filas de T y las variables Height y Weight. Muéstrela.

variablesByName = T(1:5,["Height","Weight"])
variablesByName=5×2 table
                Height    Weight
                ______    ______

    Smith         71       176  
    Johnson       69       163  
    Williams      64       131  
    Jones         67       133  
    Brown         64       119  

No es necesario que los nombres de las variables de la tabla sean identificadores válidos de MATLAB®. También pueden incluir espacios y caracteres no ASCII, y empezar por cualquier carácter.

Por ejemplo, renombre la variable SelfAssessedHealthStatus con la función renamevars. Añada espacios y un guion para que el nombre de la variable se lea mejor. Después, indexe en T utilizando nombres de variables.

T = renamevars(T,"SelfAssessedHealthStatus","Self-Assessed Health Status");
T(1:5,["Age","Smoker","Self-Assessed Health Status"])
ans=5×3 table
                Age    Smoker    Self-Assessed Health Status
                ___    ______    ___________________________

    Smith       38     true               Excellent         
    Johnson     43     false              Fair              
    Williams    38     false              Good              
    Jones       40     false              Fair              
    Brown       49     false              Good              

Especificar nombres de variables o filas con patrones

Cuando especifica nombres de variables o filas de una tabla, puede usar un patrón que defina una regla para el texto coincidente. Por ejemplo, puede hacer coincidir nombres de variables que empiecen por "Var" y vayan seguidos de dígitos. Puede crear expresiones de patrones con objetos, cadenas y operadores de pattern.

Por ejemplo, indexe en T por nombre de fila para encontrar todas las filas que cuenten con un paciente cuyo apellido empiece por la letra G. Para que coincida con cualquier letra después de la G, utilice la función wildcardPattern.

beginsWithG = "G" + wildcardPattern
beginsWithG = pattern
  Matching:

    "G" + wildcardPattern

T(beginsWithG,:)
ans=6×5 table
                Age    Height    Weight    Smoker    Self-Assessed Health Status
                ___    ______    ______    ______    ___________________________

    Garcia      27       69       131      true               Fair              
    Green       44       71       193      false              Good              
    Gonzalez    35       66       118      false              Fair              
    Gray        31       64       130      false              Excellent         
    Gonzales    48       71       174      false              Good              
    Griffin     49       70       186      false              Fair              

Indexe en T por nombre de variable para encontrar nombres que contengan Status como parte del nombre.

containsStatus = wildcardPattern + "Status" + wildcardPattern;
T(1:5,containsStatus)
ans=5×1 table
                Self-Assessed Health Status
                ___________________________

    Smith                Excellent         
    Johnson              Fair              
    Williams             Good              
    Jones                Fair              
    Brown                Good              

Indexar por tipo de datos de las variables

En lugar de especificar variables con nombres o números, puede crear un subíndice de tipo de datos que coincida con todas las variables que tengan el mismo tipo de datos.

En primer lugar, cree un subíndice de tipo de datos que coincida con las variables de tabla numéricas usando la función vartype.

subscriptObject = vartype("numeric")
subscriptObject = 
	table vartype subscript:

		Select table variables matching the type 'numeric'

Cree una tabla que contenga solo variables numéricas de T. La variable Smoker es una variable lógica y Self-Assessed Health Status es una variable categorical, por lo que se excluyen.

onlyNumericVariables = T(:,subscriptObject)
onlyNumericVariables=100×3 table
                Age    Height    Weight
                ___    ______    ______

    Smith       38       71       176  
    Johnson     43       69       163  
    Williams    38       64       131  
    Jones       40       67       133  
    Brown       49       64       119  
    Davis       46       68       142  
    Miller      33       64       142  
    Wilson      40       68       180  
    Moore       28       68       183  
    Taylor      31       66       132  
    Anderson    45       68       128  
    Thomas      42       66       137  
    Jackson     25       71       174  
    White       39       72       202  
    Harris      36       65       129  
    Martin      48       71       181  
      ⋮

Buscar filas cuyos valores cumplen condiciones lógicas

Cree otra tabla más pequeña a partir de los datos del archivo MAT patients.

load patients.mat
T = table(Age,Height,Weight,Smoker);

Para encontrar las filas de una tabla donde los valores cumplen una condición lógica, utilice la indexación lógica. En primer lugar, utilice la notación de puntos para acceder a las variables de tabla. Después, puede crear un arreglo de índices lógicos en los que los valores de las variables cumplen una condición especificada. Indexe en la tabla con los índices lógicos.

Extraer datos de una variable de tabla usando notación de puntos

Para extraer datos de una variable de tabla, utilice la notación de puntos.

Por ejemplo, represente un histograma de valores numéricos a partir de la variable de tabla Weight. Con la notación de puntos, puede tratar T.Weight como un arreglo numérico. T.Weight es un vector columna de doble precisión con 100 filas.

histogram(T.Weight)
title("Patient Weights")

Figure contains an axes object. The axes object with title Patient Weights contains an object of type histogram.

Indexar en filas que cumplen condiciones lógicas

Puede indexar en un arreglo o una tabla con un arreglo de índices lógicos. Normalmente, suele utilizar una expresión lógica que determina los valores de una variable de tabla que cumplen una condición lógica. El resultado de la expresión es un arreglo de índices lógicos.

Por ejemplo, cree índices lógicos que incluyan los pacientes cuya edad sea inferior a 40.

rows = T.Age < 40
rows = 100x1 logical array

   1
   0
   1
   0
   0
   0
   1
   0
   1
   1
      ⋮

Para extraer la altura de los pacientes cuya edad es inferior a 40, indexe en la variable Height con rows. Hay 56 pacientes menores de 40.

T.Height(rows)
ans = 56×1

    71
    64
    64
    68
    66
    71
    72
    65
    69
    69
      ⋮

Puede indexar en una tabla con índices lógicos. Muestre las filas de T de los pacientes menores de 40.

T(rows,:)
ans=56×4 table
    Age    Height    Weight    Smoker
    ___    ______    ______    ______

    38       71       176      true  
    38       64       131      false 
    33       64       142      true  
    28       68       183      false 
    31       66       132      false 
    25       71       174      false 
    39       72       202      true  
    36       65       129      false 
    32       69       191      true  
    27       69       131      true  
    37       70       179      false 
    39       64       117      false 
    28       65       123      true  
    25       70       189      false 
    39       63       143      false 
    25       63       114      false 
      ⋮

Puede hacer coincidir varias condiciones con una expresión lógica. Muestre las filas de los pacientes menores de 40 que fuman.

rows = (T.Smoker==true & T.Age<40);
T(rows,:)
ans=18×4 table
    Age    Height    Weight    Smoker
    ___    ______    ______    ______

    38       71       176      true  
    33       64       142      true  
    39       72       202      true  
    32       69       191      true  
    27       69       131      true  
    28       65       123      true  
    30       67       186      true  
    33       66       180      true  
    39       71       164      true  
    37       70       194      true  
    33       67       115      true  
    31       72       178      true  
    28       69       189      true  
    39       68       182      true  
    37       65       120      true  
    31       66       141      true  
      ⋮

Notación de puntos con cualquier nombre o expresión de variable

Cuando indexa usando notación de puntos, hay dos formas de especificar una variable.

  • Por nombre, sin comillas. Por ejemplo, T.Date especifica una variable llamada "Date".

  • Por una expresión, donde la expresión está encerrada entre paréntesis después del punto. Por ejemplo, T.("Start Date") especifica una variable llamada "Start Date".

Utilice la primera sintaxis cuando el nombre de una variable de tabla también sea un identificador de MATLAB® válido. (Los identificadores válidos empiezan con una letra y solo incluyen letras, dígitos y guiones bajos).

Utilice la segunda sintaxis cuando especifique:

  • Un número que indique la posición de la variable en la tabla.

  • El nombre de una variable que no sea un identificador de MATLAB válido.

  • Una función cuya salida sea el nombre de una variable de la tabla, o una variable que añade a la tabla. La salida de la función debe ser un vector de caracteres o un escalar de cadena.

Por ejemplo, cree una tabla a partir del archivo MAT patients. Después, utilice la notación de puntos para acceder al contenido de las variables de tabla.

load patients

T = table(Age,Height,Weight,Smoker);

Para especificar una variable por posición en la tabla, utilice un número. Age es la primera variable de T, así que utilice el número 1 para especificar su posición.

T.(1)
ans = 100×1

    38
    43
    38
    40
    49
    46
    33
    40
    28
    31
      ⋮

Para especificar una variable por nombre, especifíquela después del punto o introdúzcala entre comillas y paréntesis. Como Age es un identificador válido, puede especificarlo con T.Age o T.("Age").

T.Age
ans = 100×1

    38
    43
    38
    40
    49
    46
    33
    40
    28
    31
      ⋮

Puede especificar nombres de variables de tabla que no sean identificadores de MATLAB válidos. Los nombres de las variables pueden incluir espacios y caracteres no ASCII, y empezar por cualquier carácter. Sin embargo, cuando use la notación de puntos para acceder a una variable de tabla con el nombre especificado, debe especificarlo con comillas y paréntesis.

Por ejemplo, añada el nombre de una variable con espacios y guion a T.

SelfAssessedHealthStatus = categorical(SelfAssessedHealthStatus);
T = addvars(T,SelfAssessedHealthStatus,'NewVariableNames',"Self-Assessed Health Status");
T(1:5,:)
ans=5×5 table
    Age    Height    Weight    Smoker    Self-Assessed Health Status
    ___    ______    ______    ______    ___________________________

    38       71       176      true               Excellent         
    43       69       163      false              Fair              
    38       64       131      false              Good              
    40       67       133      false              Fair              
    49       64       119      false              Good              

Acceda a la nueva variable de tabla usando la notación de puntos. Muestre los cinco primeros elementos.

healthStatus = T.("Self-Assessed Health Status");
healthStatus(1:5)
ans = 5x1 categorical
     Excellent 
     Fair 
     Good 
     Fair 
     Good 

También puede usar la salida de una función como nombre de la variable. Elimine la variable T.("Self-Assessed Health Status"). Después, sustitúyala con una variable cuyo nombre contenga la fecha actual.

T.("Self-Assessed Health Status") = [];
T.(string(datetime("today")) + " Self Report") = SelfAssessedHealthStatus;
T(1:5,:)
ans=5×5 table
    Age    Height    Weight    Smoker    19-Aug-2023 Self Report
    ___    ______    ______    ______    _______________________

    38       71       176      true             Excellent       
    43       69       163      false            Fair            
    38       64       131      false            Good            
    40       67       133      false            Fair            
    49       64       119      false            Good            

Extraer datos de filas y variables específicas

La indexación con llaves extrae datos de tablas y resultados de un arreglo, no una subtabla. Pero, aparte de esa diferencia, puede especificar filas y variables con números, nombres y subíndices de tipos de datos, como al indexar con paréntesis. Para extraer valores de una tabla, utilice llaves. Si extrae valores de múltiples variables de tabla, las variables deben tener tipos de datos para poder concatenarlas.

Especificar filas y variables

Cree una tabla a partir de arreglos lógicos y numéricos del archivo patients.

load patients

T = table(Age,Height,Weight,Smoker,...
    'RowNames',LastName);

Extraiga datos de múltiples variables de T. A diferencia de la notación de puntos, indexar con llaves sirve para extraer valores de múltiples variables de tabla y concatenarlos en un arreglo.

Extraiga la altura y el peso de los cinco primeros pacientes. Utilice índices numéricos para seleccionar las cinco primeras filas y nombres de variables para seleccionar las variables Height y Weight.

A = T{1:5,["Height","Weight"]}
A = 5×2

    71   176
    69   163
    64   131
    67   133
    64   119

A es un arreglo numérico de 5 por 2, no una tabla.

Si especifica el nombre de una variable e indexa con llaves da como resultado el mismo arreglo que con la notación de puntos. No obstante, debe especificar tanto las filas como las variables cuando utilice la indexación con llaves. Por ejemplo, las sintaxis T.Height y T{:,"Height"} devuelven el mismo arreglo.

Extraer datos de todas las filas y variables

Si las variables de tabla tienen tipos de datos que pueden ser concatenados juntos, puede usar la sintaxis T.Variables para poner todos los datos de la tabla en un arreglo. Esta sintaxis equivale a T{:,:}, donde los dos puntos indican todas las filas y todas las variables. Si la tabla tiene nombres de filas, no se incluyen en la salida de T.Variables. Los nombres de filas no se almacenan en una variable de tabla. Los nombres de filas son parte de los metadatos que describen la tabla.

A2 = T.Variables
A2 = 100×4

    38    71   176     1
    43    69   163     0
    38    64   131     0
    40    67   133     0
    49    64   119     0
    46    68   142     0
    33    64   142     1
    40    68   180     0
    28    68   183     0
    31    66   132     0
      ⋮

Consulte también

| | | |

Temas relacionados