R - 为每个唯一的因子配对执行函数,将结果存储在数据帧中

时间:2015-07-06 19:10:47

标签: r ggplot2 dataframe

我有一组来自两个条件和四种类型的数字x,y测量值。我希望在每个条件中添加x,y散点图x和y的密度(平滑直方图):http://stackoverflow.com/questions/31168944。该链接描述了一个解决方案(谢谢!),但我想通过四种类型的ggplot:facet。 ggplot可以使用stat_density处理x维度,但对于y,我认为我必须计算条件X类型的所有8种组合的密度,将其存储在数据框中,并从那里读取绘图数据。如果是这样,问题就变成了如何计算包含密度的数据框。例如:

diff

要获得两种情况下dim2的密度,我可以这样做:

set.seed(123)
dim1 <- c(rnorm(100, mean=1), rnorm(100, mean=4))
dim2 <- rnorm(200, mean=1)
condition <- factor(c(rep("a", 100), rep("b", 100)))
type <- factor(rep(c("I", "J", "K", "L"), 100))
mydf <- data.frame(dim1, dim2, condition, type)

然后使用geom_path添加到散点图。但我希望密度不仅来自unique(mydf $ cat),而是来自mydf $ condition和mydf $ type的所有8种组合。

这可能是 tapply 聚合,但我无法弄清楚如何将结果放入ggplot能够解释的数据框中;它可以嵌套 lapply 调用来运行$ condition和$ type的级别(我尝试过但失败了)。我也尝试了

的变体
ds <- do.call(rbind, lapply(unique(mydf$condition), function(lev) {
dens <- with(mydf, density(dim2[condition==lev]))
data.frame(x=dens$y, y=dens$x, condition=lev)
}))

但总结并不需要512长度的矢量值。

我怀疑有几种方法可以做到这一点 - 如果有人能让我走上正确的道路,我将感激不尽。

0 个答案:

没有答案