在MatLab中是否有类似于reshape2包中的'melt'函数的功能?

3

我正在尝试在MatLab中寻找一个类似于R软件包“reshape2”中的“melt”函数,使得每个变量都会重复行标题并堆叠在一起。

e.g.:

如果我有一个矩阵

A  1  2  3 
B  4  5  6
C  7  8  9

我想将其更改为

A 1
A 2
A 3
B 4
B 5
B 6
C 7
C 8
C 9

除了使用for()循环逐对遍历每个列之外,是否有可以执行此操作的函数?

非常感谢, KRB


1
这取决于您如何定义矩阵。根据其定义方式,解决此问题使用不同的解决方案。您用来定义此矩阵的代码是什么?MATLAB矩阵默认不支持行标题,因此您使用哪种数据类型来定义此矩阵? - rayryeng
1个回答

2

Matlab有针对表格的stackunstack函数,类似于meltcast。可以尝试以下代码:

groups = {'A'; 'B'; 'C'};
A1 = [1; 4; 7];
A2 = [2; 5; 8];
A3 = [3 ; 6; 9];

T = table(groups, A1, A2, A3)
TLong = stack(T, 2:4)

这提供了

TLong = 

    groups    A1_A2_A3_Indicator    A1_A2_A3
    ______    __________________    ________

    'A'       A1                    1       
    'A'       A2                    2       
    'A'       A3                    3       
    'B'       A1                    4       
    'B'       A2                    5       
    'B'       A3                    6       
    'C'       A1                    7       
    'C'       A2                    8       
    'C'       A3                    9       

请注意,您的示例矩阵不能存在于Matlab(或R)中,因为矩阵不能包含字符串或混合类型。如果您想使用内置函数,我建议您将现有的任何结构转换为table

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接