R dcast的对立面

R dcast的对立面,r,reshape,R,Reshape,其思想是将频率表转换为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 > library(reshape2) > dat2 <- dcast(dat, x + y ~ ., fun.ag

其思想是将频率表转换为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
> library(reshape2)
> dat2 <- dcast(dat, x + y ~ ., fun.aggregate = length)
> dat2
  x y count
1 a c     2
2 b d     3

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

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

一些反转
长度的选项

您可以使用
ddply

library(plyr)
ddply(dat2,.(x), summarize, y = rep(y,count))
或者更简单地说

as.data.frame(lapply(dat2[c('x','y')], rep, dat2$count))

那么
dat2[rep(row.names(dat2),dat2$count),1:2]
呢?如果你做出这样的评论,我会接受。在R里做事情总是有一种更难的方法,不是吗?@mnel,这两种方法对我都不管用。如果我遗漏了一些基本的内容,我深表歉意,但第一个错误是NextMethod()中的
错误:无法将类型“closure”强制为类型为“integer”的向量
,另一个错误是rep.default中的
错误(X[[1L]],…):无效的“times”参数
。Rep确实是一个显而易见的解决方案,但它似乎不太擅长复制整行数据帧。@nacnudus它们在您的示例中起作用。
as.data.frame(lapply(dat2[c('x','y')], rep, dat2$count))