3

这个想法是将频率表转换为 geom_density 可以处理的(ggplot2)。

从频率表开始

> dat <- data.frame(x = c("a", "a", "b", "b", "b"), y = c("c", "c", "d", "d", "d"))
> dat
  x y
1 a c
2 a c
3 b d
4 b d
5 b d

使用dcast制作频率表

> library(reshape2)
> dat2 <- dcast(dat, x + y ~ ., fun.aggregate = length)
> dat2
  x y count
1 a c     2
2 b d     3

这怎么能逆转? melt似乎不是答案:

> colnames(dat2) <- c("x", "y", "count")
> melt(dat2, measure.vars = "count")
  x y variable value
1 a c    count     2
2 b d    count     3
4

1 回答 1

0

由于您可以使用任何聚合函数,因此您将无法在dcast不知道如何反转聚合的情况下反转(聚合)。

因为length,明显的逆是rep。对于像这样的聚合,sum或者mean没有明显的逆向(假设您没有将原始数据保存为属性)

一些反转选项length

你可以使用ddply

library(plyr)
ddply(dat2,.(x), summarize, y = rep(y,count))

或更简单地说

as.data.frame(lapply(dat2[c('x','y')], rep, dat2$count))
于 2013-08-02T06:36:52.467 回答