Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MATLAB-基于某些标准提取表中的选定行_Matlab_Datatable_Extract_Subset - Fatal编程技术网

MATLAB-基于某些标准提取表中的选定行

MATLAB-基于某些标准提取表中的选定行,matlab,datatable,extract,subset,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 postsA = myTable.user == 'A' 我想创建一个较小的表(但不删除原来的表!),其中包含用户a的所有帖子,包括发布的日期 在查看(请参阅删除行的最后一

假设我有一张这样的桌子:

post   user         date
____   ____   ________________
 1      A     12.01.2014 13:05
 2      B     15.01.2014 20:17
 3      A     16.01.2014 05:22
postsA = myTable.user == 'A'
我想创建一个较小的表(但不删除原来的表!),其中包含用户a的所有帖子,包括发布的日期

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

post   user         date
____   ____   ________________
 1      A     12.01.2014 13:05
 2      B     15.01.2014 20:17
 3      A     16.01.2014 05:22
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行长的解决方案?

假设
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

table(t1.post(strcmp(t1.user,'A'))、t1.date(strcmp(t1.user,'A')))
如何,其中
t1
是您的原始表?这将返回一个空表。因为我的数据集很大,所以我重新创建了与我原来帖子中相同的表,以测试您的方式。你测试过了吗?如果是这样的话,你可以发布你的代码以便我比较。谢谢你的帮助!这是一个更好的解决方案(在我的案例中也是有效的),但是它包含“user”列,我不想存储该列,因为——正如我在原始帖子中提到的那样——该表将存储在特定用户(在您的案例中——患者)的结构中,这意味着提取表中的所有数据都与他/她有关。我想这样做是为了节省资源(我的数据集中大约有100万条条目)。我假设您可以在表索引的列参数中使用范围。是否可以为此使用列的变量名?例如,T(T.user=='a',:2)将返回患者a的所有年龄条目。可以用数字给出范围,但我认为在我的情况下,如果我简单地列出,我想提取哪些列(类似于@Divakar作为评论发布的内容)