R 使用两个条件(a~b、每c、每d)将行重塑为列

R 使用两个条件(a~b、每c、每d)将行重塑为列,r,reshape,R,Reshape,我有这样一个数据帧: item price source day book 5 shop 2012-01-01 car 100 shop 2012-01-01 desk 10 shop 2012-01-01 book 4 internet 2012-01-01 car 99 internet 2012-01-01 desk 9 internet 2012-01-01 book 6 sh

我有这样一个数据帧:

item   price source   day
book   5     shop     2012-01-01
car    100   shop     2012-01-01
desk   10    shop     2012-01-01
book   4     internet 2012-01-01
car    99    internet 2012-01-01
desk   9     internet 2012-01-01
book   6     shop     2012-01-02
car    101   shop     2012-01-02
desk   11    shop     2012-01-02
book   4     internet 2012-01-02
car    100   internet 2012-01-02
desk   10    internet 2012-01-02
我希望,每天,每个项目的每个价格,如:

item price.shop price.internet day
book 5          4              2012-01-01
car  100        99             2012-01-01
desk 10         9              2012-01-01
book 6          5              2012-01-02
car  101        100            2012-01-02
desk 11         10             2012-01-02
我一直在尽我最大的努力

融化,然后

cast(df, item ~ source + variable)
但并没有达到预期的效果。我认为问题是因为我本质上有两个“每件事”的条件(每
,每
源代码
),因此没有正确的等式


感谢您的帮助

像这样的事情可能:

dat <- read.table(text = "item   price source   day
book   5     shop     2012-01-01
car    100   shop     2012-01-01
desk   10    shop     2012-01-01
book   4     internet 2012-01-01
car    99    internet 2012-01-01
desk   9     internet 2012-01-01
book   6     shop     2012-01-02
car    101   shop     2012-01-02
desk   11    shop     2012-01-02
book   4     internet 2012-01-02
car    100   internet 2012-01-02
desk   10    internet 2012-01-02",header = TRUE,sep = "")

> library(reshape2)
> dcast(dat,item + day ~ source,fun.aggregate = sum,value.var = "price")

  item        day internet shop
1 book 2012-01-01        4    5
2 book 2012-01-02        4    6
3  car 2012-01-01       99  100
4  car 2012-01-02      100  101
5 desk 2012-01-01        9   10
6 desk 2012-01-02       10   11
dat库(2)
>dcast(日期,项目+天~来源,fun.aggregate=总和,value.var=“价格”)
商品日网店
1本书2012-01-01 4 5
2本书2012-01-02 4 6
3辆车2012-01-01 99 100
4辆车2012-01-02 100 101
5办公桌2012-01-01 9 10
6办公桌2012-01-02 10 11

类似这样的事情可能:

dat <- read.table(text = "item   price source   day
book   5     shop     2012-01-01
car    100   shop     2012-01-01
desk   10    shop     2012-01-01
book   4     internet 2012-01-01
car    99    internet 2012-01-01
desk   9     internet 2012-01-01
book   6     shop     2012-01-02
car    101   shop     2012-01-02
desk   11    shop     2012-01-02
book   4     internet 2012-01-02
car    100   internet 2012-01-02
desk   10    internet 2012-01-02",header = TRUE,sep = "")

> library(reshape2)
> dcast(dat,item + day ~ source,fun.aggregate = sum,value.var = "price")

  item        day internet shop
1 book 2012-01-01        4    5
2 book 2012-01-02        4    6
3  car 2012-01-01       99  100
4  car 2012-01-02      100  101
5 desk 2012-01-01        9   10
6 desk 2012-01-02       10   11
dat库(2)
>dcast(日期,项目+天~来源,fun.aggregate=总和,value.var=“价格”)
商品日网店
1本书2012-01-01 4 5
2本书2012-01-02 4 6
3辆车2012-01-01 99 100
4辆车2012-01-02 100 101
5办公桌2012-01-01 9 10
6办公桌2012-01-02 10 11

不是plyr.reforme2答案,而是使用base:reformate():


我想人们也可以尝试一种
合并(subset\u shop,subset\u internet1:2,all=TRUE)
策略。

不是plyr.reforme2答案,而是使用base:reforme():


我想人们也可以尝试一种
合并(subset\u shop,subset\u internet1:2,all=TRUE)
策略。

也许是一种意想不到的方法(因为Joran和DWin很快就提出了重塑方案):
ftable
xtabs
一起工作。假设一个名为“dat”的
data.frame


一种可能出乎意料的方法(因为Joran和DWin很快就提出了重塑方案):
ftable
xtabs
一起工作。假设一个名为“dat”的
data.frame


dcast似乎是包2中的一个函数。最好在上面的代码中添加库(Reforme2)。看起来dcast是来自Reforme2包的函数。最好在上面的代码中添加库(重塑2)。
ftable(xtabs(price ~ item + day + source, dat))
#                 source internet shop
# item day                            
# book 2012-01-01               4    5
#      2012-01-02               4    6
# car  2012-01-01              99  100
#      2012-01-02             100  101
# desk 2012-01-01               9   10
#      2012-01-02              10   11