我是R的新手.请原谅我,如果这个问题有明显的答案,但我找不到解决办法.我有SAS的经验,可能只是以错误的方式思考这个问题.
我有一个数据集,其中包含来自数百个受试者的重复测量,每个受试者在不同年龄段进行多次测量.每个主题由ID变量标识.我想通过AGE为每个个体(ID)绘制每个测量值(比如体重).
我用ggplot2做了这样的事情:
ggplot(data = dataset, aes(x = AGE, y = WEIGHT )) + geom_line() + facet_wrap(~ID)
Run Code Online (Sandbox Code Playgroud)
这适用于少数主题,但不适用于整个数据集.
我也尝试过这样的事情:
ggplot(data=data, aes(x = AGE,y = BW, group = ID, colour = ID)) + geom_line()
Run Code Online (Sandbox Code Playgroud)
这也适用于少数科目,但数百个科目无法阅读.
我试过使用这样的代码进行子集:
temp <- split(dataset,dataset$ID)
Run Code Online (Sandbox Code Playgroud)
但我不知道如何使用生成的数据集.或者也许有一种方法可以简单地调整facet_wrap,以便创建单独的图?
谢谢!
aos*_*ith 20
因为您想要拆分数据集并为每个级别的因子制作一个图,我将使用包中的一个split-apply-return工具来处理这个问题plyr.
这是使用mtcars数据集的玩具示例.我首先创建绘图并将其命名p,然后使用dlply按因子分割数据集并返回每个级别的绘图.我正在利用%+%from ggplot2来替换plot中的data.frame.
p = ggplot(data = mtcars, aes(x = wt, y = mpg)) +
geom_line()
require(plyr)
dlply(mtcars, .(cyl), function(x) p %+% x)
Run Code Online (Sandbox Code Playgroud)
这将一个接一个地返回所有图.如果您命名结果列表对象,您也可以一次调用一个图.
plots = dlply(mtcars, .(cyl), function(x) p %+% x)
plots[1]
Run Code Online (Sandbox Code Playgroud)
编辑
我开始考虑根据因素在每个情节上设置一个标题,这看起来很有用.
dlply(mtcars, .(cyl), function(x) p %+% x + facet_wrap(~cyl))
Run Code Online (Sandbox Code Playgroud)
编辑2
这是将这些保存在单个文档中的一种方法,每页一个图.这与名为的图表列表一起使用plots.它将它们全部保存到一个文档,每页一个图.我没有更改任何默认值pdf,但您当然可以探索可以进行的更改.
pdf()
plots
dev.off()
Run Code Online (Sandbox Code Playgroud)
更新为使用包dplyr而不是plyr.这是完成的do,输出将有一个命名列,其中包含所有绘图作为列表.
library(dplyr)
plots = mtcars %>%
group_by(cyl) %>%
do(plots = p %+% . + facet_wrap(~cyl))
Source: local data frame [3 x 2]
Groups: <by row>
cyl plots
1 4 <S3:gg, ggplot>
2 6 <S3:gg, ggplot>
3 8 <S3:gg, ggplot>
Run Code Online (Sandbox Code Playgroud)
要查看R中的图,只需询问包含图的列.
plots$plots
Run Code Online (Sandbox Code Playgroud)
并保存为pdf
pdf()
plots$plots
dev.off()
Run Code Online (Sandbox Code Playgroud)