MATLAB - 根据某些标准提取表中的选定行

时间:2014-12-04 17:25:56

标签: matlab datatable extract subset

我们说我有这样一张桌子:

post   user         date
____   ____   ________________
 1      A     12.01.2014 13:05
 2      B     15.01.2014 20:17
 3      A     16.01.2014 05:22

我想创建一个较小的表(但不删除原始表!),其中包含所有帖子 - 例如 - 用户A,包括发布的日期。

在查看MATLAB's documentation时(参见删除行的最后一部分),我发现MATLAB允许您根据某些标准为表创建掩码。在我的情况下,如果我做这样的事情:

postsA = myTable.user == 'A'

我得到一个很好的掩码矢量如下:

>> postsA = 
       1
       0
       1

1s 显然是 myTable 中的那些行,它们符合我给出的规则。

在我上面指出的文档中,从原始表中删除了行:

postsNotA = myTable.user ~= 'A' % note that I have to reverse the criterion since I'm choosing stuff that will be removed
myTable(postsNotA,:) = [];
然而,如上所述,我会不喜欢触摸原来的桌子。这里一个可能的解决方案是创建一个包含两列的空表:

post  date
____  ____

在原始表格的所有行中进行交互,同时还查看我的掩码向量 postsA 的当前值,如果它等于1,则复制其中的两列我感兴趣的那一行,并将这个缩小的行连接到我的小表。我想知道的是,对于这个问题,是否存在或多或少1-2行长的解决方案?

1 个答案:

答案 0 :(得分:5)

假设myTable是您的原始表格。

你可以做到

myTable(myTable.user == 'A',:)

示例代码:

user = ['A';'B';'A';'C';'B'];
Age = [38;43;38;40;49];
Height = [71;69;64;67;64];
Weight = [176;163;131;133;119];
BloodPressure = [124 93; 109 77; 125 83; 117 75; 122 80];
T = table(user,Age,Height,Weight,BloodPressure)
T(T.user=='A',:)

给出:

  

T =

user    Age    Height    Weight          BloodPressure      
____    ___    ______    ______    _________________________

A       38     71        176       124                    93
B       43     69        163       109                    77
A       38     64        131       125                    83
C       40     67        133       117                    75
B       49     64        119       122                    80
     

ans =

user    Age    Height    Weight          BloodPressure      
____    ___    ______    ______    _________________________

A       38     71        176       124                    93
A       38     64        131       125                    83