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作为评论发布的内容)