2016-09-27 48 views
1

我有一個高大MATLAB table這樣的:如何使用MATLAB中的複製從高到寬格式高效地轉換表格?

spam = 

    Data    cat1   cat2   time 
__________   ___________ __________ ______  

    -0.41763   1   0   0 
    0.11719   1   0   0 
    ...    ...   ...   ... 
    -0.16546   1   0   1 
    ...    ...   ...   ... 
    -0.21763   1   0   2 
    0.31719   2   0   0 
    ...    ...   ...   ... 
    0.58116   3   1   0 
    ...    ...   ...   ... 

Data是雙格式的,cat1(8級)和cat2(3電平)是分類,和time(3個電平)是順序(但也可以是雙)。每個cat1cat2級別的每個時間點包括30個(技術)重複(上面表示爲...)。

我希望使用這些數據在fitrm,這需要他們在廣泛的格式。因此我需要將Data列轉換爲三個單獨的變量。

使用unstack我得到的是這樣的:

spam = unstack(spam, 'Data', 'time') 
Warning: Variable names were modified to make them valid MATLAB identifiers. 

spam = 
cat1  cat2  x0    x1   x2 
______ _________ ___________ _______ ________ 

1   0   -7.6605e-15  2.3168  0.45234 
2   0    6.2172e-15  5.1661  24.89 
3   1    8.8818e-16  56.697  40.441 
4   1   -7.9936e-15 -22.741 -17.191 
5   1   -1.4433e-15 -7.7803 -20.817 
6   2    5.5511e-16  7.8535 -0.21172 
7   2    5.3291e-15  13.658  5.8402 
8   2    2.2204e-15  9.1739  13.814 

顯然,這結果不包括在高大的表中的所有信息。 具體而言,重複未被帶到結果。

使用accumarray,與in another stack page顯示的類似方式可能是有希望的,但在我看來,手動執行一次轉換似乎更容易。

有人知道更有效的方法嗎?

回答

-1

我現在意識到,也許最簡單的方法是在高表中添加一個額外的變量replication,然後像上面那樣使用unstack

例(有不同的數據,從my answer here拍攝):

name = ['A' 'A' 'A' 'B' 'B' 'C' 'C' 'C' 'C' 'D' 'D' 'E' 'E' 'E']'; 
value = randn(14, 1); 
rep = [1, 2, 3, 1, 2, 1, 2, 3, 4, 1, 2, 1, 2, 3]; 
T = table(name, value, rep); 

T = 

name  value  rep 
____ _________ ___ 

A   0.53767 1 
A   1.8339 2 
A   -2.2588 3 
B   0.86217 1 
B   0.31877 2 
C   -1.3077 1 
C  -0.43359 2 
C   0.34262 3 
C   3.5784 4 
D   2.7694 1 
D   -1.3499 2 
E   3.0349 1 
E   0.7254 2 
E  -0.063055 3 



pivotTable = unstack(T, 'value','name') 

pivotTable = 

    rep  A   B   C   D   E  
    ___ _______ _______ ________ _______ _________ 

    1  0.53767 0.86217  -1.3077  2.7694  3.0349 
    2  1.8339 0.31877 -0.43359 -1.3499  0.7254 
    3  -2.2588  NaN  0.34262  NaN -0.063055 
    4   NaN  NaN  3.5784  NaN   NaN 
+0

如果你要自己回答你的問題,它需要的不僅僅是一個鏈接到另一個答案更多的信息。 –

+0

感謝您通知禮儀@AnderBiguri。我在答案中添加了一個例子。 – vkehayas

相關問題