Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中重塑数据帧的形状_R_Dataframe_Reshape - Fatal编程技术网

在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