R+;重塑:data.frame中列的变化
我在R中使用重塑来计算data.frame列上的聚合统计信息。这是我的data.frame:R+;重塑:data.frame中列的变化,r,dataframe,reshape,R,Dataframe,Reshape,我在R中使用重塑来计算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 这只是一个小test data.frame,用于尝试和理解重塑包。我熔化,然后铸造,试图找到as和bs的平均值: > melt(df, id = "ID") -> df.m > cast(df.m, ID ~ variable, fun = mean) ID a
> df
a a b b ID
1 1 1 1 1 1
2 2 3 2 3 2
3 3 5 3 5 3
这只是一个小test data.frame,用于尝试和理解重塑包。我熔化,然后铸造,试图找到a
s和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
s去了哪里?我是否有一个非常基本的误解?如果是:这是什么?我在这里更新了我的答案来解决这个问题:
显然,如果您的数据帧没有唯一的列名,它们将无法正确地融化
编辑:
显然,要使melt()
正常工作,您需要具有唯一的列名,而不是ab
的列名。最低限度地a.1 a.2 a.3 b.1 b.2
或其他什么。使用melt()
后,您可以选择在variable
的级别上使用gsub()
来消除歧义值,或者使用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")))
levels(df.m$variable)这不是有效的数据框,因为列没有唯一的名称。不知道我可以创建无效的数据框。