从R中的矩阵和向量列表构造ggplot2可用数据集的建议

时间:2014-04-14 19:54:01

标签: r ggplot2 reshape reshape2

我希望为功能数据制作ggplot2图形。通常,功能数据存储为不同的矩阵。因此,目标是迅速重塑数据。作为一个例子,下面是我在R中获取fda :::增长数据集的粗略传递,它是三个对象的列表:一个男孩矩阵(' hgtm'),一个女孩矩阵( hgtf),以及它们被测量的常见年龄的矢量。

从fda的帮助手册中复制:

增长:伯克利增长研究数据

描述

包含39名男孩和54名1至18岁女孩的高度以及收集年龄的名单。

格式

此列表"增长"包含以下组件:

hgtm是一个31乘39的数字矩阵,给出了31岁时39个男孩的厘米高度。

hgtf一个31乘54的数字矩阵,给出了31岁时54个女孩的厘米高度。

对长度为31的数字向量进行老化,给出测量高度的年龄。

详细

年龄不等。

如何更简洁地完成这一重塑,以便功能数据分析中的人更有可能使用ggplot2制作情节?

## take the list 'growth' from fda package and make dataframe 'gg.growth'
require(fda); require(ggplot2)
gg.growth <- with(growth, data.frame(age=rep(age, ncol(hgtf)+ncol(hgtm)),
                                     hgt=c(hgtf,hgtm),
                                     sex=c(rep("female", length(age)*ncol(hgtf)),
                                           rep("male"  , length(age)*ncol(hgtm)))))

## add 'id' variable for subsetting
gg.growth$id <- with(growth,rep(1:(ncol(hgtf)+ncol(hgtm)), each=length(age)))

## make a ggplot
ggplot(subset(gg.growth, id %in% c(1,40,88,93 )), 
       aes(x=age, y=hgt, colour=sex, group=id), alpha=.5) + geom_line()

1 个答案:

答案 0 :(得分:3)

reshape2对于这类事情非常有用:

library(reshape2)
growth.mlt <- melt(growth[-3])  # don't need 3rd element since it is in rownames

那就是它。现在你可以绘制:

ggplot(growth.mlt, aes(x=Var1, y=value, group=Var2)) +
  geom_line() + facet_wrap(~ L1)

这里我们分别绘制男性和女性的身高与年龄:

enter image description here

显然,情节将受益于更好的标签,但你明白了。