1

我在 R 中使用 reshape 来计算 data.frame 列的聚合统计信息。这是我的data.frame:

> df
  a a b b ID
1 1 1 1 1  1
2 2 3 2 3  2
3 3 5 3 5  3

这只是一个小测试 data.frame 来尝试理解 reshape 包。我融化,然后投射,试图找到as 和bs 的平均值:

> melt(df, id = "ID") -> df.m
> cast(df.m, ID ~ variable, fun = mean)
  ID a b
1  1 1 1
2  2 2 2
3  3 3 3

啊!什么?希望平均值c(2,3)是 2.5 等等。这是怎么回事?这是一件事:

> df.m
   ID variable value
1   1        a     1
2   2        a     2
3   3        a     3
4   1        a     1
5   2        a     2
6   3        a     3
7   1        b     1
8   2        b     2
9   3        b     3
10  1        b     1
11  2        b     2
12  3        b     3

这是怎么回事?我5的两个都去哪儿了?我在这里有一个非常基本的误解吗?如果是这样:它是什么?

4

2 回答 2

2

这不是一个有效的数据框,因为列没有唯一的名称。

于 2010-07-29T00:23:21.400 回答
1

我在这里更新了我的答案来解决这个问题: R: aggregate columns of a data.frame

显然,如果您的数据框没有唯一的列名,它们将无法正确融合。

编辑:而不是列名a a a b b,显然你需要有唯一的列名melt()才能正常工作。最低限度a.1 a.2 a.3 b.1 b.2,什么的。使用 之后melt(),获得合理级别的选项variablegsub()在级别上使用variable以消除歧义值,或者用于colsplit()创建两个新列。对于我刚刚给出的虚拟名称,它看起来像:

levels(df.m$variable) <- gsub("\\..*", "", levels(df.m$variable))
#or
df.m <- cbind(df.m, colsplit(df.m$variable, split = "\\.", names = c("Measure","N")))
于 2010-07-28T20:05:53.547 回答