Main Content

Acceder a datos en tablas

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

Las razones habituales para indexar en tablas son:

  • Reordenar o eliminar filas y variables.

  • Agregar arreglos como filas o variables nuevas.

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

Otra forma de acceder o modificar los datos de una tabla es abrirla en el editor de variables para editarla gráficamente. Para abrir una tabla, haga doble clic en ella en el navegador del área de trabajo o utilice la función openvar.

Resumen de sintaxis de indexación de tablas

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

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

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

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

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

  • A partir de la versión R2019b, los nombres de variables y filas pueden incluir cualquier carácter, incluidos espacios y caracteres no ASCII. Además, también pueden comenzar por cualquier carácter, no solo con letras. Los nombres de variables y filas no tienen que ser identificadores de MATLAB® válidos (como determina la función isvarname).

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

Tipo de salida

Sintaxis

Filas

Variables

Ejemplos

Tabla, con filas y variables específicas

T(rows,vars)

Especificadas como:

  • Números de fila (entre 1 y m)

  • Arreglo lógico con m elementos

  • Nombres, si T tiene nombres de filas

  • Tiempos, si T es un horario

  • Dos puntos (:), que significa todas las filas

Especificadas como:

  • Números de variable (entre 1 y n)

  • Arreglo lógico con n elementos

  • Nombres

  • Dos puntos (:), que significa todas las variables

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

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

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

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

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

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

  • T(:,"A" + wildcardPattern)

    Tabla con todas las filas y variables cuyos nombres comiencen por A

Tabla, que contenga variables que tengan el tipo de datos especificado

S = vartype(type);

T(rows,S)

Especificadas como:

  • Números de fila (entre 1 y m)

  • Arreglo lógico con m elementos

  • Nombres, si T tiene nombres de filas

  • Tiempos, si T es un horario

  • Dos puntos (:), que significa todas las filas

Especificadas como un 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, que extraiga los datos de una variable

T.var

T.(expression)

No especificadas

Especificadas como:

  • El nombre de una variable (sin comillas)

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

  • T.Date

    Arreglo extraído de la variable de una tabla denominada Date

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

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

  • T.(1)

    Arreglo extraído de la primera variable de una tabla

Arreglo, que extraiga los datos de una variable y filas específicas

T.var(rows)

T.(expression)(rows)

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

Especificadas como:

  • El nombre de una variable (sin comillas)

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

  • T.Date(1:5)

    Cinco primeras filas del arreglo extraídas de una variable de la tabla denominada Date

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

    Cinco primeras filas del arreglo extraídas de una variable de la tabla denominada 2019/06/30

  • T.(1)(1:5)

    Cinco primeras filas del arreglo extraídas de la primera variable de la tabla

Arreglo, que concatene datos de las filas y variables especificadas

T{rows,vars}

Especificadas como:

  • Números de fila (entre 1 y m)

  • Arreglo lógico con m elementos

  • Nombres, si T tiene nombres de filas

  • Tiempos, si T es un horario

  • Dos puntos (:), que significa todas las filas

Especificadas como:

  • Números de variable (entre 1 y n)

  • Arreglo lógico con n elementos

  • Nombres

  • Dos puntos (:), que significa todas las variables

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

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

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

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

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

    Arreglo concatenado de todas las filas y las variables denominadas A y B

  • T{:,"A" + wildcardPattern}

    Arreglo concatenado de todas las filas y variables cuyos nombres comiencen por A

Arreglo, que concatene datos de las filas y variables especificadas con tipo de datos especificado

S = vartype(type);

T{rows,S}

Especificadas como:

  • Números de fila (entre 1 y m)

  • Arreglo lógico con m elementos

  • Nombres, si T tiene nombres de filas

  • Tiempos, si T es un horario

  • Dos puntos (:), que significa todas las filas

Especificadas como un tipo de datos, como "numeric", "categorical" o "datetime"

  • S = vartype("numeric");

    T{1:5,S}

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

Arreglo, que concatene datos de todas las filas y variables

T.Variables

No especificadas

No especificadas

  • T.Variables

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

Indexar tablas con filas y variables especificadas

Cargue los datos de muestra de 100 pacientes del archivo MAT patients en 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 en LastName como nombres de fila. T es una tabla de 100 por 5, con 100 filas y cinco variables. (Cuando se especifica un vector de nombres de fila, no cuenta como una variable de la 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 tiene un conjunto fijo de valores que se pueden 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 mediante índices numéricos o la palabra clave end

Cree una subtabla que contenga las primeras cinco filas y todas las variables de T. Para especificar las filas y las variables deseadas, utilice índices numéricos entre paréntesis. Este tipo de indexación es similar a la indexación 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 utilizar la palabra clave end para indicar 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, se pueden utilizar los nombres de las filas o las variables entre paréntesis. (En este caso, utilizar índices de fila y dos puntos es más compacto que utilizar nombres de filas o variables).

Indexar mediante nombres

Seleccione todos los datos para los pacientes con los apellidos Griffin, Diaz y Hayes. Dado que T tiene nombres de filas que son los apellidos de los pacientes, indexe en T mediante los nombres de 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 tenga solo las primeras cinco 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  

Los nombres de las variables de la tabla no tienen que ser identificadores de MATLAB® válidos. Pueden incluir espacios y caracteres no ASCII, y pueden comenzar por cualquier carácter.

Por ejemplo, renombre la variable SelfAssessedHealthStatus mediante la función renamevars. Agregue espacios y una raya para que la variable se lea mejor. A continuación, indexe en T mediante los 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 filas y variables mediante patrones

Cuando se especifican nombres de filas o variables de tablas, se puede utilizar un patrón que defina una regla para el texto que coincida. Por ejemplo, puede coincidir con los nombres de variables que comiencen por "Var" seguido de cualquier dígito. Puede crear expresiones con patrones mediante objetos, cadenas y operadores de pattern.

Por ejemplo, indexar en T por nombre de fila para encontrar todas las filas en las que el apellido del paciente empieza por la letra G. Para obtener cualquier letra después de 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 cualquier nombre que contenga 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 mediante 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 para encontrar las variables numéricas de la tabla mediante la función vartype.

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

		Select table variables matching the type 'numeric'

	See Access Data in a Table.

Cree una tabla que tenga solo las variables numéricas de T. La variable Smoker es una variable lógica y la variable Self-Assessed Health Status es una variable categorical, por eso quedan excluidas.

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  
      ⋮

Encontrar filas donde los valores cumplan condiciones lógicas

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

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

Para encontrar las filas de una tabla donde los valores cumplan 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 la tabla. A continuación, puede crear un arreglo de índices lógicos donde los valores de las variables cumplan una condición que especifique usted. Indexe en la tabla mediante los índices lógicos.

Extraer datos de una variable de una tabla mediante la notación de puntos

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

Por ejemplo, represente un histograma de valores numéricos 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 cumplan condiciones lógicas

Puede indexar en un arreglo o una tabla mediante un arreglo de índices lógicos. Por lo general, se utiliza una expresión lógica que determina los valores de una variable de una 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 coincidan con 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 alturas para pacientes cuya edad sea inferior a 40, indexe en la variable Height mediante rows. Hay 56 pacientes con menos de 40 años.

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 para los pacientes con menos de 40 años.

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 unir varias condiciones con una expresión lógica. Muestre las filas para pacientes fumadores con menos de 40 años.

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 de variable o expresión

Cuando se indexa mediante notación de puntos, existen dos formas de especificar una variable.

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

  • Por una expresión, en cuyo caso la expresión está encerrada entre paréntesis tras el punto. Por ejemplo, T.("Start Date") especifica una variable denominada "Start Date".

Utilice la primera sintaxis cuando el nombre de una variable de una tabla también resulte ser un identificador de MATLAB® válido. (Un identificador válido comienza con una letra e incluye solo 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 haya agregado 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. A continuación, utilice la notación de puntos para acceder al contenido de las variables de la tabla.

load patients

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

Para especificar una variable por su posición en la tabla, utilice un número. Age es la primera variable en 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 su nombre, especifíquelo tras el punto o enciérrelo entre comillas y paréntesis. Dado que Age es un identificador válido, puede especificarlo mediante T.Age o T.("Age").

T.Age
ans = 100×1

    38
    43
    38
    40
    49
    46
    33
    40
    28
    31
      ⋮

Puede especificar los nombres de variables de tablas que no sean identificadores de MATLAB válidos. Los nombres de variables pueden incluir espacios y caracteres no ASCII, y pueden comenzar por cualquier carácter. Sin embargo, cuando utilice la notación de puntos para acceder a una variable de una tabla como un nombre, debe especificarla mediante comillas y paréntesis.

Por ejemplo, agregue el nombre de una variable con espacios y un 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 la tabla mediante la notación de puntos. Muestre los primeros cinco elementos.

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

También puede utilizar la salida de una función como nombre de una variable. Elimine la variable T.("Self-Assessed Health Status"). A continuación, reemplácela con una variable cuyo nombre incluya 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    31-Aug-2022 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 las filas y variables especificadas

La indexación con llaves extrae datos de una tabla y tiene como resultado un arreglo, no una subtabla. Pero, además de esa diferencia, puede especificar filas y variables mediante números, nombres y subíndices de tipo datos, al igual que puede hacer cuando indexa mediante paréntesis. Para extraer valores de una tabla, utilice llaves. Si extrae valores de múltiples variables de tablas, las variables deben tener tipos de datos que permitan concatenarlos juntos.

Especificar filas y variables

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

load patients

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

Extraiga datos de múltiples variables en T. A diferencia de la notación de puntos, la indexación con llaves puede 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 primeras cinco 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 un nombre de variable, la indexación con llaves tiene como resultado el mismo arreglo que se puede obtener con la notación de puntos. Sin embargo, 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 todas las variables de la tabla tienen tipos de datos que les permitan concatenarse juntos, puede utilizar 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 fila, estos no están incluidos en la salida de T.Variables. Los nombres de filas no se almacenan en una variable de la tabla. Los nombres de filas forman parte de los metadatos que describen una 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