我在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来尝试和理解重塑包。我融化,然后施展,试图找到a
和b
s的平均值:
> 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
去哪儿了?我有一个非常基本的误解吗?如果是这样的话:它是什么?
答案 0 :(得分:2)
这不是有效的数据框,因为列没有唯一的名称。
答案 1 :(得分: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()
后,您为variable
获得合理级别的选项是在gsub()
级别上使用variable
来消除歧义值,或者使用{{1}创建两个新列。对于我刚给出的虚拟名称,它看起来像:
colsplit()