如何使用melt函数命名每个变量

15

我有一个矩阵,想要用reshape2中的melt函数对其进行改变以便在ggplot2中制图,但是找不到一种添加自定义列名的方法。

#Create toy data
MyData <- matrix(rnorm(15,500), nrow = 5, ncol = 3, dimnames = list(
    c("Unknown","0-4","4-9","10-14","15-19"),c("Area1","Area2","Area3")))

Dat2 <- melt(MyData, value.name = "Count")

#Reform data using melt, define Count as value name
MyData2 <- melt(MyData, value.name = "Count")

这可以得到我想要的结果,但随后的操作必须引用 Var1Var2

我尝试使用 variable.name 显式地给它们命名:

MyData2 <- melt(MyData, value.name = "Count",
    variable.name = c("AgeGroup", "Geo"))

当然我可以使用colnames()来为它们命名,但我想使用melt来完成。这样做可行吗?我需要备份吗?

1个回答

21

使用varnames参数:

melt(MyData, value.name = "Count", varnames=c('AgeGroup', 'Geo'))
   AgeGroup   Geo    Count
1   Unknown Area1 501.6685
2       0-4 Area1 499.2812
3       4-9 Area1 500.3892
4     10-14 Area1 498.6380
5     15-19 Area1 500.5904
6   Unknown Area2 499.4590
7       0-4 Area2 500.5464
8       4-9 Area2 500.5635
9     10-14 Area2 500.7211
10    15-19 Area2 500.8381
11  Unknown Area3 498.8154
12      0-4 Area3 499.1818
13      4-9 Area3 499.6678
14    10-14 Area3 499.3586
15    15-19 Area3 500.3962

您的 MyData 是一个矩阵(所以使用了 melt.array,而该函数使用 varnames),而不是数据框(melt.data.frame 使用 variable.name)。请参考 ?melt.array


2
以上的解决方案可以用于重命名变量,但我发现value.name不能用于命名值。我觉得以前这个方法是可行的,因为我看了一些过去用于构建诊断图的代码。文档中只有varnames作为函数的一部分,所以命名值列甚至不可能吗? - Josh R.
上面的代码对我有效(即value.name="Count" 将“value”列命名为“Count”)。 - mathematical.coffee
不好意思,我无法解释,我使用了相同的代码却得到了不同的结果。现在它正常工作了。也许重新启动电脑有所帮助。对于这个不必要的问题,我表示抱歉。(叹气) - Josh R.
1
显然,你必须加载reshape2,并确保reshape被分离/未加载?或者更简单地说,确保指定:reshape2 :: melt(... - CrunchyTopping
@CrunchyTopping 就是这样! - bathyscapher

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