MATLAB 基础知识 数据类型 分组数组 将表变量中的文本转换为分类数组

本文演示了如何将表中的变量从字符向量元胞数组转换为分类数组。

加载样本数据并创建表

加载从 100 位患者收集的样本数据。

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   

将患者的 Age、Gender、Height、Weight、SelfAssessedHealthStatus 和 Location 数据存储在表中。将变量 LastName 中的唯一标识符用作行名称。

T = table(Age,Gender,Height,Weight,...
    SelfAssessedHealthStatus,Location,...
    'RowNames',LastName);

将表变量从字符向量元胞数组转换为分类数组

字符向量元胞数组 Gender 和 Location 包含离散的唯一值集合。

将 Gender 和 Location 转换为分类数组。

T.Gender = categorical(T.Gender);
T.Location = categorical(T.Location);

变量 SelfAssessedHealthStatus 包含四个唯一值:Excellent、Fair、Good 和 Poor。

将 SelfAssessedHealthStatus 转换为一个有序分类数组,这样这些类别采用数学排序 Poor < Fair < Good < Excellent。

T.SelfAssessedHealthStatus = categorical(T.SelfAssessedHealthStatus,...
    {'Poor','Fair','Good','Excellent'},'Ordinal',true);

输出摘要

使用 summary 汇总表来查看每个变量的数据类型、说明、单位和其他描述性统计量。

format compact

summary(T)
Variables:
    Age: 100x1 double
        Values:
            Min          25   
            Median       39   
            Max          50   
    Gender: 100x1 categorical
        Values:
            Female       53   
            Male         47   
    Height: 100x1 double
        Values:
            Min          60   
            Median       67   
            Max          72   
    Weight: 100x1 double
        Values:
            Min          111  
            Median     142.5  
            Max          202  
    SelfAssessedHealthStatus: 100x1 ordinal categorical
        Values:
            Poor            11   
            Fair            15   
            Good            40   
            Excellent       34   
    Location: 100x1 categorical
        Values:
            County General Hospital         39   
            St. Mary s Medical Center       24   
            VA Hospital                     37   

表变量 Gender、SelfAssessedHealthStatus 和 Location 为分类数组。摘要包含每个类别中的元素数的统计。例如,该摘要指示 100 位患者中的 53 位为女性,47 位为男性。

基于类别选择数据

创建一个子表 T1,其包含在 County General Hospital 就医的所有女性患者的年龄、身高和体重。您可以轻松地基于分类数组 Gender 和 Location 中的值创建一个逻辑向量。

rows = T.Location=='County General Hospital' & T.Gender=='Female';

rows 是一个 100×1 的逻辑向量,对于表中满足指定条件(性别为女性,位置为 County General Hospital)的行,该逻辑向量会在其对应位置包含逻辑值 true (1)。

定义变量的子集。

vars = {'Age','Height','Weight'};

使用圆括号创建子表 T1。

T1 = T(rows,vars)
T1=19×3 table
                  Age    Height    Weight
                  ___    ______    ______
    Brown         49       64       119  
    Taylor        31       66       132  
    Anderson      45       68       128  
    Lee           44       66       146  
    Walker        28       65       123  
    Young         25       63       114  
    Campbell      37       65       135  
    Evans         39       62       121  
    Morris        43       64       135  
    Rivera        29       63       130  
    Richardson    30       67       141  
    Cox           28       66       111  
    Torres        45       70       137  
    Peterson      32       60       136  
    Ramirez       48       64       137  
    Bennett       35       64       131

A 是一个 19×3 的表。

由于有序分类数组对其类别采用数学排序,因此可以使用关系运算(例如大于和小于)对它们执行按元素比较。

创建一个子表 T2,其包含健康状况评估为较差或一般的所有患者的性别、年龄、身高和体重。

首先,定义要包括在表 T2 中的行子集。

rows = T.SelfAssessedHealthStatus<='Fair';

然后,定义要包括在表 T2 中的变量子集。

vars = {'Gender','Age','Height','Weight'};

使用圆括号创建子表 T2。

T2 = T(rows,vars)
T2=26×4 table
                 Gender    Age    Height    Weight
                 ______    ___    ______    ______
    Johnson      Male      43       69       163  
    Jones        Female    40       67       133  
    Thomas       Female    42       66       137  
    Jackson      Male      25       71       174  
    Garcia       Female    27       69       131  
    Rodriguez    Female    39       64       117  
    Lewis        Female    41       62       137  
    Lee          Female    44       66       146  
    Hall         Male      25       70       189  
    Hernandez    Male      36       68       166  
    Lopez        Female    40       66       137  
    Gonzalez     Female    35       66       118  
    Mitchell     Male      39       71       164  
    Campbell     Female    37       65       135  
    Parker       Male      30       68       182  
    Stewart      Male      49       68       170

T2 是一个 26×4 的表。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

结冰架构

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值