如何在 Matlab 中从表格制作数据透视表

问题描述 投票:0回答:3

有没有一种简单的方法可以在 Matlab 中制作数据透视表

table
? 就像 Excel 中的,还是 Python 中的
pandas.pivot_table
?我在文件交换中找到了 pivottable.m,但它不适用于
tables

这是一个例子,如果我有一张桌子

t

name     value
_____    _____

'Foo'     0   
'Bar'    -1   
'Bar'     5   
'Foo'     1   

我想使用

name
函数聚合
@sum
列,以获得:

name     sum_of_value
_____    ________

'Bar'    4       
'Foo'    1   

有简单的方法吗?

matlab pivot-table
3个回答
6
投票

您可以使用

grpstats
来创建简单的汇总表。 但是,使用
unstack
可以获得更复杂的枢轴。

% Example: Create columns from Var1, summing the values for each date:

T = 
    date        item      value
    ________    _______   _______
    2015.2      a         1
    2015.2      a         1
    2015.2      b         1
    2015.2      c         1
    2015.4      a         2
    2015.4      b         2
    2015.4      c         2
    2015.4      d         2
    2016.2      a         3
    2016.2      b         3
    2016.2      c         3
    2016.2      d         3


T2 = unstack(T, 'value', 'item', 'GroupingVariables', 'date', 'AggregationFunction', @sum);

T2 = 
    date        a        b        c        d   
    ________    _____    _____    _____    _____
    2015.2      2        1        1        NaN
    2015.4      2        2        2        2
    2016.2      3        3        3        3

5
投票

我找到了一种使用

accumarray
的方法(可能还有更好的方法):

[C,ia,ic] = unique(t.name);
pivot_table = table;
pivot_table.name = C;
pivot_table.sum_of_value = accumarray(ic, t.value, [], @sum)

pivot_table = 

name     sum_of_value
_____    ____________

'Bar'    4           
'Foo'    1  

编辑:我将其扩展为一个函数,并将其添加到Matlab文件交换中


2
投票
从 R2023a 开始,您可以使用“枢轴”功能:

https://www.mathworks.com/help/matlab/ref/pivot.html

P = pivot(T, Rows="name", DataVariable="value");
pivot 函数还可以通过指定“Columns”值来执行 2d 数据透视。

23a之前,可以使用groupsummary:

P = groupsummary(T,"name","sum","value");
使用 groupsummary,您可以一次计算多个变量的多个统计数据。

© www.soinside.com 2019 - 2024. All rights reserved.