gpt4 book ai didi

r - 如何按因子对数据框进行子集化并为每个子集重复绘图?

转载 作者:行者123 更新时间:2023-12-04 09:11:03 24 4
gpt4 key购买 nike

我是 R 的新手。如果这个问题有明显的答案,但我找不到解决方案,请原谅我。我有 SAS 的经验,可能只是以错误的方式思考这个问题。

我有一个数据集,其中包含来自数百个主题的重复测量值,每个主题在不同年龄段都有多个测量值。每个主题都由一个 ID 变量标识。我想按年龄为每个个体(ID)绘制每个测量值(比方说体重)。

我用 ggplot2 做这样的事情:

ggplot(data = dataset, aes(x = AGE, y = WEIGHT )) + geom_line() + facet_wrap(~ID)

这适用于少数主题,但不适用于整个数据集。

我也试过这样的事情:
ggplot(data=data, aes(x = AGE,y = BW, group = ID, colour = ID)) + geom_line()

这也适用于少数主题,但无法读取数百个主题。

我尝试使用这样的代码进行子集化:
temp <- split(dataset,dataset$ID)

但我不确定如何处理生成的数据集。或者也许有一种方法可以简单地调整 facet_wrap 以便创建单独的图?

谢谢!

最佳答案

因为您想拆分数据集并为因子的每个级别绘制一个图,所以我将使用来自 plyr 的拆分-应用-返回工具之一来解决此问题。包裹。

这是一个使用 mtcars 的玩具示例数据集。我首先创建情节并将其命名 p ,然后使用 dlply按因子拆分数据集并返回每个级别的图。我正在利用 %+%来自 ggplot2替换图中的 data.frame。

p = ggplot(data = mtcars, aes(x = wt, y = mpg)) + 
geom_line()

require(plyr)
dlply(mtcars, .(cyl), function(x) p %+% x)

这将一个接一个地返回所有地块。如果您命名结果列表对象,您也可以一次调用一个图。
plots = dlply(mtcars, .(cyl), function(x) p %+% x)
plots[1]

编辑

我开始考虑根据因素在每个情节上放置一个标题,这似乎很有用。
dlply(mtcars, .(cyl), function(x) p %+% x + facet_wrap(~cyl))

编辑 2

这是将这些保存在单个文档中的一种方法,每页一个图。这与名为 plots 的图列表一起使用.它将它们全部保存到一个文档中,每页一个图。我没有更改 pdf 中的任何默认值,但您当然可以探索您可以做出的更改。
pdf()
plots
dev.off()

更新 使用包 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>

要查看 R 中的绘图,只需询问包含绘图的列。
plots$plots

并保存为pdf
pdf()
plots$plots
dev.off()

关于r - 如何按因子对数据框进行子集化并为每个子集重复绘图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19146665/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com