2014-12-04 50 views
2

比方說,我有一個這樣的表: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 

我想創建一個較小的表包含的所有帖子(但不刪除原有的一個!) - 例如 - 用戶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 
____ ____ 

interate通過我的原始表中的所有行,同時也看着我的面具矢量postsA的當前值,如果它等於1 ,複製我感興趣的那一行中的兩列,並將這個縮小的行連接到我的較小的表中。我想知道的是,如果這個問題的解決方案或多或少有1-2行的話?

+1

如何'表(t1.post(的strcmp(t1.user, 'A')),t1.date(的strcmp(t1.user, 'A'))) ','t1'是你原來的桌子? – Divakar 2014-12-04 17:35:42

+0

這將返回一個空表。由於我的數據集很大,我重新創建了與原始文章中相同的表格,以測試您的方式。你測試過了嗎?如果是這樣,你可以請你發佈你的代碼,以便我可以比較。 – rbaleksandar 2014-12-04 18:08:24

+0

感謝您的幫助! – rbaleksandar 2014-12-04 18:29:30

回答

4

假設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 
+0

這是一個更好的(在我的情況下也工作)的解決方案,但它包含我不想存儲的「用戶」列,因爲 - 正如我在我原來的帖子中提到的 - 表將被存儲在特定用戶的結構中(在您的病例 - 患者中),這意味着提取表中的所有數據無論如何都是關於他/她的。我想這樣做是爲了節省資源(在我的數據集中談論大約1 000 000個條目)。 我認爲你可以在表的索引的列參數中使用一個範圍。是否有可能爲此目的使用列的變量名? – rbaleksandar 2014-12-04 18:09:20

+0

例如,T(T.user =='A',:2)將返回患者A的所有Age-entries。可以給出一個帶有數字的範圍,但我認爲在我的情況下,它會更容易閱讀和處理if我只是列出了我想要提取的列(類似於@Divakar發佈的評論) – rbaleksandar 2014-12-04 18:16:48

+0

我編輯了您的答案以添加其他信息。 – rbaleksandar 2014-12-04 18:29:15