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