怎么把多个变量变成一个维度
melt函数可以分组吗?
melt函数可以分组吗?
可以。
melt 是溶解/分解的意思, 即拆分数据。
reshape/reshape2 的 melt 函数是个 S3 通用函数,它会根据数据类型(数据框,数组或列表)选择 , 或 函数进行实际操作。
1. 如果是数组(array)类型,melt 的用法就很简单,它依次对各维度的名称进行组合将 数据进行线性/向量化。如果数组有 n 维,那么得到的结果共有 n 1 列,前 n 列记录数组的 位置信息,最后一列才是观测值。
gt datax lt- array(1:8, dimc(2,2,2))
gt melt(datax)
Var1 Var2 Var3 value
1 1 1 1 1
2 2 1 1 2
3 1 2 1 3
4 2 2 1 4
5 1 1 2 5
6 2 1 2 6
7 1 2 2 7
8 2 2 2 8
gt melt(datax, varnamesLETTERS[24:26],#34Val#34)
X Y Z Val
1 1 1 1 1
2 2 1 1 2
3 1 2 1 3
4 2 2 1 4
5 1 1 2 5
6 2 1 2 6
7 1 2 2 7
8 2 2 2 8
2. 如果是列表数据,melt 函数将列表中的数据拉成两列,一列记录列表元素的值,另一列记录列表元素的名称;如果列表中的元素是列表,则增加列变量存储元素名称。元素值排列在前,名称在后,越是顶级的列表元素名称越靠后:
gt datax lt- list(agi#34AT1G10000#34, GOc(#34GO:1010#34,#34GO:2020#34), KEGGc(#340100#34, #340200#34, #340300#34))
gt melt(datax)
value L1
1 AT1G10000 agi
2 GO:1010 GO
3 GO:2020 GO
4 0100 KEGG
5 0200 KEGG
6 0300 KEGG
gt melt(list(at_0100datax))
value L2 L1
1 AT1G10000 agi at_0100
2 GO:1010 GO at_0100
3 GO:2020 GO at_0100
4 0100 KEGG at_0100
5 0200 KEGG at_0100
6 0300 KEGG at_0100
3. 如果数据是数据框类型,melt的参数就稍微复杂些:
gt melt(data, , ,
#34variable#34, ..., na.rm FALSE,
#34value#34)
其中 是被当做维度的列变量,每个变量在结果中占一列; 是被当成观测值的列变量,它们的列变量名称和值分别组成 variable 和 value两列,列变量名称用 和 来指定。
n元数组什么意思?
n元数组组成的空间属于n次空间,一个变量代表一个空间维度。