首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在matlab中由表生成数据透视表

如何在matlab中由表生成数据透视表
EN

Stack Overflow用户
提问于 2016-02-19 19:13:29
回答 2查看 5.9K关注 0票数 6

有没有一种简单的方法从matlab的table中制作数据透视表?像Excel一样,还是Python中的pandas.pivot_table?我在文件交换上找到了pivottable.m,但它不适用于tables

下面是一个示例,假设我有一个表t

代码语言:javascript
复制
name     value
_____    _____

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

我想使用@sum函数在name列上进行聚合,以获得:

代码语言:javascript
复制
name     sum_of_value
_____    ________

'Bar'    4       
'Foo'    1   

有什么简单的方法可以做到这一点吗?

EN

回答 2

Stack Overflow用户

发布于 2016-11-11 19:24:18

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

代码语言:javascript
复制
% 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
票数 6
EN

Stack Overflow用户

发布于 2016-02-19 19:39:56

我找到了一种使用accumarray的方法(可能还有更好的方法):

代码语言:javascript
复制
[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  

编辑:我将其扩展为一个函数和added it to the Matlab file exchange

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35503920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档