在R中重塑数据帧的形状
我有一个数据框,看起来像在R中重塑数据帧的形状,r,dataframe,reshape,R,Dataframe,Reshape,我有一个数据框,看起来像 F1 F2 Number Banana Apple 9 Orange Banana 7 Apple Orange 8 Banana Orange 6 我需要把这个转换成 Type F1 F2 Banana 15 7 Orange 7 14 Apple 8 9 以下是一种方法: setNames(merge(aggregate(Number ~ F1, dat, sum),
F1 F2 Number
Banana Apple 9
Orange Banana 7
Apple Orange 8
Banana Orange 6
我需要把这个转换成
Type F1 F2
Banana 15 7
Orange 7 14
Apple 8 9
以下是一种方法:
setNames(merge(aggregate(Number ~ F1, dat, sum),
aggregate(Number ~ F2, dat, sum),
by.x = "F1", by.y = "F2", all = TRUE),
c("Type", "F1", "F2"))
# Type F1 F2
# 1 Apple 8 9
# 2 Banana 15 7
# 3 Orange 7 14
其中,dat是数据帧的名称。这个问题也可以通过重塑2软件包轻松解决:
library(reshape2)
x <- melt(mydf, id.vars="Number")
dcast(x, value ~ variable, value.var="Number", fun.aggregate=sum)
# value F1 F2
# 1 Apple 8 9
# 2 Banana 15 7
# 3 Orange 7 14
在您的数据已经很长的情况下,正如它们所处的位置一样,它甚至更简单:
xtabs(Number ~ Date + Type, mydf)
# Type
# Date M1 M2
# 01/01/14 9 7
# 01/02/14 8 6
数字相加不起来…如果我的行数不同怎么办?F1中有三种,F2中有四种。@user2684128查看更新。现在,即使有不同数量的行,它也可以工作。我有一个数据框,看起来像日期类型编号01/01/14 M1 9 01/01/14 M2 7 01/02/14 M1 8 01/02/14 M2 6我需要将其转换为日期M1 M2 01/01/14 9 7 01/02/14 8 6I使用dcastdf,日期~类型太好了!我爱你
xtabs(Number ~ Date + Type, mydf)
# Type
# Date M1 M2
# 01/01/14 9 7
# 01/02/14 8 6