有没有一种简单的方法从matlab的table中制作数据透视表?像Excel一样,还是Python中的pandas.pivot_table?我在文件交换上找到了pivottable.m,但它不适用于tables。
下面是一个示例,假设我有一个表t
name value
_____ _____
'Foo' 0
'Bar' -1
'Bar' 5
'Foo' 1 我想使用@sum函数在name列上进行聚合,以获得:
name sum_of_value
_____ ________
'Bar' 4
'Foo' 1 有什么简单的方法可以做到这一点吗?
发布于 2016-11-11 19:24:18
您可以对简单的汇总表使用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发布于 2016-02-19 19:39:56
我找到了一种使用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 编辑:我将其扩展为一个函数和added it to the Matlab file exchange
https://stackoverflow.com/questions/35503920
复制相似问题