MATLAB 基础知识 数据类型 表 添加、删除和重新排列表变量

本文说明如何在表中添加、删除和重新排列列向变量。您可以使用 addvars、movevars 和 removevars 函数添加、移动和删除表变量。作为备选方法,您还可以使用圆点语法或对表进行索引来修改表变量。使用 splitvars 和 mergevars 函数可以拆分多列变量和将多个变量合并为一个变量。最后,可以使用 rows2vars 函数调整表的方向,使表的行成为输出表的变量。

您也可以使用变量编辑器修改表变量。

加载样本数据并创建表

从 patients MAT 文件加载样本数据数组。显示加载到工作区中的变量的名称和大小。

load patients
whos -file patients
  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   

创建两个表。用通过患者问卷收集来的信息创建一个表 T,再用测量患者得来的数据创建另一个表 T2。每个表有 100 行。

T = table(Age,Gender,Smoker);
T2 = table(Height,Weight,Systolic,Diastolic);

显示每个表的前五行。

head(T,5)
ans=5×3 table
    Age      Gender      Smoker
    ___    __________    ______

    38     {'Male'  }    true  
    43     {'Male'  }    false 
    38     {'Female'}    false 
    40     {'Female'}    false 
    49     {'Female'}    false 
head(T2,5)
ans=5×4 table
    Height    Weight    Systolic    Diastolic
    ______    ______    ________    _________

      71       176        124          93    
      69       163        109          77    
      64       131        125          83    
      67       133        117          75    
      64       119        122          80    

串联添加来自另一个表的变量

通过将表 T 与 T2 水平串联来向前者添加变量。

T = [T T2];

显示 T 的前五行。

head(T,5)
ans=5×7 table
    Age      Gender      Smoker    Height    Weight    Systolic    Diastolic
    ___    __________    ______    ______    ______    ________    _________

    38     {'Male'  }    true        71       176        124          93    
    43     {'Male'  }    false       69       163        109          77    
    38     {'Female'}    false       64       131        125          83    
    40     {'Female'}    false       67       133        117          75    
    49     {'Female'}    false       64       119        122          80    

表 T 现在包含 7 个变量和 100 行。

如果您要以水平方式串联的表具有行名称,则 horzcat 将通过匹配行名称来串联表。因此,这些表必须使用相同的行名称,但列顺序无关紧要。

将变量从工作区添加到表中

将来自工作区变量 LastName 的患者姓名添加到 T 中的第一个表变量之前。您可以使用新位置附近的变量的名称在表中指定任何位置。使用引号来引用表变量的名称。但是,如果输入参数是工作区变量,则不要对其使用引号。

T = addvars(T,LastName,'Before','Age');
head(T,5)
ans=5×8 table
      LastName      Age      Gender      Smoker    Height    Weight    Systolic    Diastolic
    ____________    ___    __________    ______    ______    ______    ________    _________

    {'Smith'   }    38     {'Male'  }    true        71       176        124          93    
    {'Johnson' }    43     {'Male'  }    false       69       163        109          77    
    {'Williams'}    38     {'Female'}    false       64       131        125          83    
    {'Jones'   }    40     {'Female'}    false       67       133        117          75    
    {'Brown'   }    49     {'Female'}    false       64       119        122          80 

您还可以使用数字指定表中的位置。例如,使用数字指定位置时,上述命令的等效语法为 T = addvars(T,LastName,‘Before’,1)。

使用圆点语法添加变量

添加新的表变量的另一种方法是使用圆点语法。当您使用圆点语法时,新变量始终添加为最后一个表变量。无论变量是什么数据类型,只要行数与表相同,就可以添加到表。

通过水平串联两个变量 Systolic 和 Diastolic 来创建一个针对血压的新变量。将它添加到 T。

T.BloodPressure = [Systolic Diastolic];
head(T,5)
ans=5×9 table
      LastName      Age      Gender      Smoker    Height    Weight    Systolic    Diastolic    BloodPressure
    ____________    ___    __________    ______    ______    ______    ________    _________    _____________

    {'Smith'   }    38     {'Male'  }    true        71       176        124          93         124     93  
    {'Johnson' }    43     {'Male'  }    false       69       163        109          77         109     77  
    {'Williams'}    38     {'Female'}    false       64       131        125          83         125     83  
    {'Jones'   }    40     {'Female'}    false       67       133        117          75         117     75  
    {'Brown'   }    49     {'Female'}    false       64       119        122          80         122     80  

T 现在包含 9 个变量和 100 行。一个表变量可以有多个列。因此,虽然 BloodPressure 有两列,但它是一个表变量。

将一个新变量 BMI 添加到表 T 中,该表包含每位患者的体重指数。BMI 是一个关于身高和体重的函数。当您计算 BMI 时,您可以引用 T 中的 Weight 和 Height 变量。

T.BMI = (T.Weight*0.453592)./(T.Height*0.0254).^2;

计算 BMI 时使用的运算符 ./ 和 .^ 分别表示逐元素除法和乘方。

显示表 T 的前五行。

head(T,5)
ans=5×10 table
      LastName      Age      Gender      Smoker    Height    Weight    Systolic    Diastolic    BloodPressure     BMI  
    ____________    ___    __________    ______    ______    ______    ________    _________    _____________    ______

    {'Smith'   }    38     {'Male'  }    true        71       176        124          93         124     93      24.547
    {'Johnson' }    43     {'Male'  }    false       69       163        109          77         109     77      24.071
    {'Williams'}    38     {'Female'}    false       64       131        125          83         125     83      22.486
    {'Jones'   }    40     {'Female'}    false       67       133        117          75         117     75      20.831
    {'Brown'   }    49     {'Female'}    false       64       119        122          80         122     80      20.426

在表中移动变量

使用 movevars 函数移动表变量 BMI,使其位于变量 Weight 之后。当按名称指定表变量时,请使用引号。

T = movevars(T,'BMI','After','Weight');
head(T,5)
ans=5×10 table
      LastName      Age      Gender      Smoker    Height    Weight     BMI      Systolic    Diastolic    BloodPressure
    ____________    ___    __________    ______    ______    ______    ______    ________    _________    _____________

    {'Smith'   }    38     {'Male'  }    true        71       176      24.547      124          93         124     93  
    {'Johnson' }    43     {'Male'  }    false       69       163      24.071      109          77         109     77  
    {'Williams'}    38     {'Female'}    false       64       131      22.486      125          83         125     83  
    {'Jones'   }    40     {'Female'}    false       67       133      20.831      117          75         117     75  
    {'Brown'   }    49     {'Female'}    false       64       119      20.426      122          80         122     80  

您还可以使用数字指定表中的位置。例如,使用数字指定位置时,上述命令的等效语法为 T = movevars(T,'BMI,‘After’,6)。按名称引用变量通常更方便。

使用索引移动表变量

除上述方法外,您还可以通过索引来移动表变量。您可以对表进行索引,使用的语法与对矩阵进行索引相同。

将 BloodPressure 移动到 BMI 之后。

T = T(:,[1:7 10 8 9]);
head(T,5)
ans=5×10 table
      LastName      Age      Gender      Smoker    Height    Weight     BMI      BloodPressure    Systolic    Diastolic
    ____________    ___    __________    ______    ______    ______    ______    _____________    ________    _________

    {'Smith'   }    38     {'Male'  }    true        71       176      24.547     124     93        124          93    
    {'Johnson' }    43     {'Male'  }    false       69       163      24.071     109     77        109          77    
    {'Williams'}    38     {'Female'}    false       64       131      22.486     125     83        125          83    
    {'Jones'   }    40     {'Female'}    false       67       133      20.831     117     75        117          75    
    {'Brown'   }    49     {'Female'}    false       64       119      20.426     122     80        122          80  

在包含多个变量的表中,使用 movevars 函数通常更方便。

删除变量

要删除表变量,请使用 removevars 函数。删除 Systolic 和 Diastolic 表变量。

T = removevars(T,{'Systolic','Diastolic'});
head(T,5)
ans=5×8 table
      LastName      Age      Gender      Smoker    Height    Weight     BMI      BloodPressure
    ____________    ___    __________    ______    ______    ______    ______    _____________

    {'Smith'   }    38     {'Male'  }    true        71       176      24.547     124     93  
    {'Johnson' }    43     {'Male'  }    false       69       163      24.071     109     77  
    {'Williams'}    38     {'Female'}    false       64       131      22.486     125     83  
    {'Jones'   }    40     {'Female'}    false       67       133      20.831     117     75  
    {'Brown'   }    49     {'Female'}    false       64       119      20.426     122     80

使用圆点语法删除变量

您也可以使用圆点语法和空矩阵 [] 删除变量。从表中删除 Age 变量。

T.Age = [];
head(T,5)
ans=5×7 table
      LastName        Gender      Smoker    Height    Weight     BMI      BloodPressure
    ____________    __________    ______    ______    ______    ______    _____________

    {'Smith'   }    {'Male'  }    true        71       176      24.547     124     93  
    {'Johnson' }    {'Male'  }    false       69       163      24.071     109     77  
    {'Williams'}    {'Female'}    false       64       131      22.486     125     83  
    {'Jones'   }    {'Female'}    false       67       133      20.831     117     75  
    {'Brown'   }    {'Female'}    false       64       119      20.426     122     80  

使用索引删除变量

您还可以使用索引和空矩阵 [] 删除变量。从表中删除 Gender 变量。

T(:,'Gender') = [];
head(T,5)
ans=5×6 table
      LastName      Smoker    Height    Weight     BMI      BloodPressure
    ____________    ______    ______    ______    ______    _____________

    {'Smith'   }    true        71       176      24.547     124     93  
    {'Johnson' }    false       69       163      24.071     109     77  
    {'Williams'}    false       64       131      22.486     125     83  
    {'Jones'   }    false       67       133      20.831     117     75  
    {'Brown'   }    false       64       119      20.426     122     80  

拆分和合并表变量

要将多列表变量拆分为多个单列变量,请使用 splitvars 函数。将变量 BloodPressure 拆分为两个变量。

T = splitvars(T,'BloodPressure','NewVariableNames',{'Systolic','Diastolic'});
head(T,5)
ans=5×7 table
      LastName      Smoker    Height    Weight     BMI      Systolic    Diastolic
    ____________    ______    ______    ______    ______    ________    _________

    {'Smith'   }    true        71       176      24.547      124          93    
    {'Johnson' }    false       69       163      24.071      109          77    
    {'Williams'}    false       64       131      22.486      125          83    
    {'Jones'   }    false       67       133      20.831      117          75    
    {'Brown'   }    false       64       119      20.426      122          80    

同样,您可以使用 mergevars 函数将多个相关的表变量组合在一个变量中。将 Systolic 和 Diastolic 重新组合为一个变量,并将其命名为 BP。

T = mergevars(T,{'Systolic','Diastolic'},'NewVariableName','BP');
head(T,5)
ans=5×6 table
      LastName      Smoker    Height    Weight     BMI          BP    
    ____________    ______    ______    ______    ______    __________

    {'Smith'   }    true        71       176      24.547    124     93
    {'Johnson' }    false       69       163      24.071    109     77
    {'Williams'}    false       64       131      22.486    125     83
    {'Jones'   }    false       67       133      20.831    117     75
    {'Brown'   }    false       64       119      20.426    122     80

调整行的方向使其变为变量

您可以使用 rows2vars 函数调整表或时间表中行的方向,使它们成为输出表中的变量。但是,如果该表具有多列变量,则必须先拆分它们,才能调用 rows2vars。

对 T 的行调整方向。指定 T 中患者的姓名是输出表中表变量的名称。T3 的第一个变量包含 T 的变量的名称。T3 的其余每个变量都包含来自 T 对应行的数据。

T = splitvars(T,'BP','NewVariableNames',{'Systolic','Diastolic'});
T3 = rows2vars(T,'VariableNamesSource','LastName');
T3(:,1:5)
ans=6×5 table
    OriginalVariableNames    Smith     Johnson    Williams    Jones 
    _____________________    ______    _______    ________    ______

        {'Smoker'   }             1         0           0          0
        {'Height'   }            71        69          64         67
        {'Weight'   }           176       163         131        133
        {'BMI'      }        24.547    24.071      22.486     20.831
        {'Systolic' }           124       109         125        117
        {'Diastolic'}            93        77          83         75

您可以对 T3 使用圆点语法,以数组形式访问患者数据。但是,如果输入表的行值不能串联,则输出表的变量是元胞数组。

T3.Smith
ans = 6×1

    1.0000
   71.0000
  176.0000
   24.5467
  124.0000
   93.0000
  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

结冰架构

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

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

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

打赏作者

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

抵扣说明:

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

余额充值