1

私はそのようなデータフレームを持っています:

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

1日あたり、次のようなアイテムごとの各価格を希望します。

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

私は最善を尽くしてきました

melt'ingそしてその後

cast(df, item ~ source + variable)

しかし、望ましい結果を得ることができません。問題は、本質的に2つの「perthing」条件(per day、per source)があるため、正しい方程式がないためだと思います。

助けてくれてありがとう

4

3 に答える 3

6

plyr.reshape2 の回答ではなく、base:reshape() を使用:

> reshape(dat, idvar=c("item", "day"),  timevar="source", direction="wide")
  item        day price.shop price.internet
1 book 2012-01-01          5              4
2  car 2012-01-01        100             99
3 desk 2012-01-01         10              9
7 book 2012-01-02          6              4
8  car 2012-01-02        101            100
9 desk 2012-01-02         11             10

merge(subset_shop, subset_internet, 1:2, all=TRUE)戦略を試すこともできたと思います。

于 2013-01-03T18:15:54.073 に答える
4

多分このような何か:

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
于 2013-01-03T18:13:32.257 に答える
2

おそらく予想外のアプローチ (Joran と DWin がすぐに変形の代替案を打ち出したため):ftableそしてxtabs共同作業。data.frame呼び出された「dat」を想定します。

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
于 2013-01-03T18:26:04.723 に答える