创建表并为其分配数据 您所在的位置:网站首页 数据转化为区域 创建表并为其分配数据

创建表并为其分配数据

2023-05-17 07:55| 来源: 网络整理| 查看: 265

从输入数组创建表

您可以使用 table 函数从数组创建表。例如,创建一个包含五名患者数据的小表。

首先,创建六个列向数据数组。这些数组包含五行,因为有五个患者。(这些数组大部分是 5×1 列向量,而 BloodPressure 是 5×2 矩阵。)

LastName = ["Sanchez";"Johnson";"Zhang";"Diaz";"Brown"]; Age = [38;43;38;40;49]; Smoker = [true;false;true;false;true]; Height = [71;69;64;67;64]; Weight = [176;163;131;133;119]; BloodPressure = [124 93; 109 77; 125 83; 117 75; 122 80];

现在创建一个表 patients 作为数据的容器。在对 table 函数的这一调用中,输入参数使用工作区变量名称作为 patients 中变量的名称。

patients = table(LastName,Age,Smoker,Height,Weight,BloodPressure)patients=5×6 table LastName Age Smoker Height Weight BloodPressure _________ ___ ______ ______ ______ _____________ "Sanchez" 38 true 71 176 124 93 "Johnson" 43 false 69 163 109 77 "Zhang" 38 true 64 131 125 83 "Diaz" 40 false 67 133 117 75 "Brown" 49 true 64 119 122 80

该表是一个 5×6 的表,因为它有六个变量。正如 BloodPressure 变量所示,一个表变量本身可以有多个列。此示例说明为什么表具有行和变量,而不是行和列。

使用圆点表示法将变量添加到表中

创建表后,您可以随时使用圆点表示法添加新变量。圆点表示法按名称引用表变量,即 T.varname,其中 T 是表,varname 是变量名称。这种表示法类似于您用于访问数据并将数据分配给结构体字段的表示法。

例如,将一个 BMI 变量添加到 patients。先使用 patients.Weight 和 patients.Height 中的值计算体重指数,即 BMI。再将 BMI 值分配给一个新的表变量。

patients.BMI = (patients.Weight*0.453592)./(patients.Height*0.0254).^2patients=5×7 table LastName Age Smoker Height Weight BloodPressure BMI _________ ___ ______ ______ ______ _____________ ______ "Sanchez" 38 true 71 176 124 93 24.547 "Johnson" 43 false 69 163 109 77 24.071 "Zhang" 38 true 64 131 125 83 22.486 "Diaz" 40 false 67 133 117 75 20.831 "Brown" 49 true 64 119 122 80 20.426 将变量分配给空表

创建表的另一种方法是从空表开始,并为其分配变量。例如,重新创建患者数据的表,但这次使用圆点表示法分配变量。

首先,通过不带参数调用 table 创建一个空表 patients2。

patients2 = tablepatients2 = 0x0 empty table

接下来,通过对变量赋值来创建患者数据的副本。表变量名称不必与数组名称匹配,如 Name 和 BP 表变量所示。

patients2.Name = LastName; patients2.Age = Age; patients2.Smoker = Smoker; patients2.Height = Height; patients2.Weight = Weight; patients2.BP = BloodPressurepatients2=5×6 table Name Age Smoker Height Weight BP _________ ___ ______ ______ ______ __________ "Sanchez" 38 true 71 176 124 93 "Johnson" 43 false 69 163 109 77 "Zhang" 38 true 64 131 125 83 "Diaz" 40 false 67 133 117 75 "Brown" 49 true 64 119 122 80 预分配表和填充行

有时,您知道要存储在表中的数据的大小和数据类型,但您计划稍后对数据赋值。也许您计划一次只添加几行。这种情况下,可以先在表中预分配空间,然后再为空行赋值,这样效率会更高。

例如,要为预计包含不同气象站的时间和温度读数的表预分配空间,请使用 table 函数。指定表变量的大小和数据类型,而不是提供输入数组。要为它们提供名称,请指定 'VariableNames' 参数。预分配会用适合其数据类型的默认值填充表变量。

sz = [4 3]; varTypes = ["double","datetime","string"]; varNames = ["Temperature","Time","Station"]; temps = table('Size',sz,'VariableTypes',varTypes,'VariableNames',varNames)temps=4×3 table Temperature Time Station ___________ ____ _________ 0 NaT 0 NaT 0 NaT 0 NaT

向表中分配或添加行的一种方法是将元胞数组赋给行。如果元胞数组是行向量,并且其元素与其各自变量的数据类型匹配,则赋值会将元胞数组转换为表行。但是,使用元胞数组一次只能对一行进行赋值。为前两行赋值。

temps(1,:) = {75,datetime('now'),"S1"}; temps(2,:) = {68,datetime('now')+1,"S2"}temps=4×3 table Temperature Time Station ___________ ____________________ _________ 75 30-Jan-2023 14:40:17 "S1" 68 31-Jan-2023 14:40:17 "S2" 0 NaT 0 NaT

您也可以将一个较小的表中的行赋到另一个大一些的表中。使用此方法,您可以一次对一行或多行赋值。

temps(3:4,:) = table([63;72],[datetime('now')+2;datetime('now')+3],["S3";"S4"])temps=4×3 table Temperature Time Station ___________ ____________________ _______ 75 30-Jan-2023 14:40:17 "S1" 68 31-Jan-2023 14:40:17 "S2" 63 01-Feb-2023 14:40:17 "S3" 72 02-Feb-2023 14:40:17 "S4"

您可以使用这两种语法中的任何一种,通过在表的末尾对行进行赋值来增大表的大小。如有必要,会使用默认值填充缺失行。

temps(6,:) = {62,datetime('now')+6,"S6"}temps=6×3 table Temperature Time Station ___________ ____________________ _________ 75 30-Jan-2023 14:40:17 "S1" 68 31-Jan-2023 14:40:17 "S2" 63 01-Feb-2023 14:40:17 "S3" 72 02-Feb-2023 14:40:17 "S4" 0 NaT 62 05-Feb-2023 14:40:17 "S6" 将变量转换为表

您可以将具有不同数据类型的变量转换为表。元胞数组和结构体是其他形式的容器,可以存储具有不同数据类型的数组。因此,您可以将元胞数组和结构体转换为表。您也可以将数组转换为表,表中的每个变量对应数组中的一个值列。要转换这些类型的变量,请使用 array2table、cell2table 或 struct2table 函数。

例如,使用 array2table 将数组转换为表。数组没有列名称,因此该表将应用默认的变量名称。

A = randi(3,3)A = 3×3 3 3 1 3 2 2 1 1 3 a2t = array2table(A)a2t=3×3 table A1 A2 A3 __ __ __ 3 3 1 3 2 2 1 1 3

您可以使用 "VariableNames" 名称-值参数提供自己的表变量名称。

a2t = array2table(A,"VariableNames",["First","Second","Third"])a2t=3×3 table First Second Third _____ ______ _____ 3 3 1 3 2 2 1 1 3 从文件读取表

在 CSV(逗号分隔值)文件或 Excel® 电子表格等文件中包含大量表格数据是很常见的。要将此类数据读入表中,请使用 readtable 函数。

例如,CSV 文件 outages.csv 是 MATLAB 附带的示例文件。该文件包含一组停电数据。outages.csv 的第一行为列名称。文件的其余部分包含每次停电的数据值(以逗号分隔)。此处显示了前几行。

Region,OutageTime,Loss,Customers,RestorationTime,Cause SouthWest,2002-02-01 12:18,458.9772218,1820159.482,2002-02-07 16:50,winter storm SouthEast,2003-01-23 00:49,530.1399497,212035.3001,,winter storm SouthEast,2003-02-07 21:15,289.4035493,142938.6282,2003-02-17 08:14,winter storm West,2004-04-06 05:44,434.8053524,340371.0338,2004-04-06 06:10,equipment fault MidWest,2002-03-16 06:18,186.4367788,212754.055,2002-03-18 23:23,severe storm ...

要读取 outages.csv 并将数据存储在表中,可以使用 readtable。它将数值、日期时间以及字符串读入具有适当数据类型的表变量。此处,Loss 和 Customers 是数值数组。OutageTime 和 RestorationTime 变量是 datetime 数组,因为 readtable 识别出了输入文件的这些列中文本的日期时间格式。要将其余文本数据读入字符串数组,请指定 "TextType" 名称-值参数。

outages = readtable("outages.csv","TextType","string")outages=1468×6 table Region OutageTime Loss Customers RestorationTime Cause ___________ ________________ ______ __________ ________________ _________________ "SouthWest" 2002-02-01 12:18 458.98 1.8202e+06 2002-02-07 16:50 "winter storm" "SouthEast" 2003-01-23 00:49 530.14 2.1204e+05 NaT "winter storm" "SouthEast" 2003-02-07 21:15 289.4 1.4294e+05 2003-02-17 08:14 "winter storm" "West" 2004-04-06 05:44 434.81 3.4037e+05 2004-04-06 06:10 "equipment fault" "MidWest" 2002-03-16 06:18 186.44 2.1275e+05 2002-03-18 23:23 "severe storm" "West" 2003-06-18 02:49 0 0 2003-06-18 10:54 "attack" "West" 2004-06-20 14:39 231.29 NaN 2004-06-20 19:16 "equipment fault" "West" 2002-06-06 19:28 311.86 NaN 2002-06-07 00:51 "equipment fault" "NorthEast" 2003-07-16 16:23 239.93 49434 2003-07-17 01:12 "fire" "MidWest" 2004-09-27 11:09 286.72 66104 2004-09-27 16:37 "equipment fault" "SouthEast" 2004-09-05 17:48 73.387 36073 2004-09-05 20:46 "equipment fault" "West" 2004-05-21 21:45 159.99 NaN 2004-05-22 04:23 "equipment fault" "SouthEast" 2002-09-01 18:22 95.917 36759 2002-09-01 19:12 "severe storm" "SouthEast" 2003-09-27 07:32 NaN 3.5517e+05 2003-10-04 07:02 "severe storm" "West" 2003-11-12 06:12 254.09 9.2429e+05 2003-11-17 02:04 "winter storm" "NorthEast" 2004-09-18 05:54 0 0 NaT "equipment fault" ⋮ 使用导入工具导入表

最后,您可以使用导入工具以交互方式预览和导入电子表格或带分隔符的文本文件中的数据。打开导入工具有两种方法。

MATLAB 工具条:在主页选项卡中的变量部分中,点击导入数据。

MATLAB 命令提示符:输入 uiimport(filename),其中 filename 是文本文件或电子表格文件的名称。

例如,通过使用 uiimport 和 which 获取文件路径来打开 outages.csv 示例文件。

uiimport(which("outages.csv"))

导入工具向您显示 outages.csv 中六列的预览。要将数据作为表导入,请按照以下步骤操作。

在导入的数据部分中,选择表作为输出类型。

点击导入所选内容(右上角附近)。名为 outages 的新表将出现在您的工作区中。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有