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 porVar
y terminen con dígitos.
Tipo de salida | Sintaxis | Filas | Variables | Ejemplos |
---|---|---|---|---|
Tabla que contiene filas y variables especificadas |
| Especificaciones:
| Especificaciones:
|
|
Tabla con las variables que tienen un tipo de datos especificado |
| Especificaciones:
| Especificado como tipo de datos, como |
|
Arreglo con datos extraídos de una variable |
| Sin especificar | Especificaciones:
|
|
Arreglo con datos extraídos de una variable y de filas específicas |
| Especificado como índices numéricos o lógicos del arreglo | Especificaciones:
|
|
Arreglo que concatena datos de filas y variables especificadas |
| Especificaciones:
| Especificaciones:
|
|
Arreglo que concatena datos de filas y variables específicas con un determinado tipo de datos |
| Especificaciones:
| Especificado como tipo de datos, como |
|
Arreglo que concatena datos a partir de todas las filas y variables |
| Sin especificar | Sin especificar |
|
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")
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
table
| histogram
| addvars
| vartype
| renamevars