[R] Restructuring data

deepayan.sarkar at gmail.com deepayan.sarkar at gmail.com
Mon Jul 16 01:05:48 CEST 2007


On 7/15/07, Daniel Malter <daniel at umd.edu> wrote:
> Hi folks,
>
> I am new to the list and relatively new to R. I am trying to unstack data
> "arraywise" and could not find a convenient solution yet. I tried to find a
> solution for the problem on help archives. I also tried to use the reshape
> command in R and the reshape package but could not get result. I will
> illustrate the case below, but the real dataset is quite large so that I
> would appreciate an easy solution if there is any.
>
> The current data structure (variable names):
>
> ID, TIME, BUY-A, BUY-B, SELL-A, SELL-B
>
> Achieved structure (with the reshape command or the reshape package)
>
> ID, TIME, BUY-A
> ID, TIME, BUY-B
> ID, TIME, SELL-A
> ID, TIME, SELL-B
>
> This is regular unstacking with two identifier variables. Nothing special
> though. What I am looking for and did not manage is the following structure:
>
> ID, TIME, BUY-A, SELL-A
> ID, TIME, BUY-B, SELL-B
>
> I am quite sure it's pretty easy, but I could not find how to do this.

This seems to work:

> foo <- data.frame(ID = 1:4, TIME=1:4,
+                   "BUY-A" = rnorm(4),
+                   "BUY-B" = rnorm(4),
+                   "SELL-A" = rnorm(4),
+                   "SELL-B" = rnorm(4), check.names = FALSE)
>
>
> foo
  ID TIME       BUY-A      BUY-B     SELL-A      SELL-B
1  1    1  0.47022807 1.09573107  0.1977035 -0.08333043
2  2    2 -0.20672870 0.07397772  1.4959044 -0.98555020
3  3    3  0.05533779 0.25821758  1.3531913  0.16808307
4  4    4 -0.11471772 1.27798740 -0.1101390 -0.36937994
>
> reshape(foo, direction="long",
+         varying = list(c("BUY-A", "BUY-B"), c("SELL-A", "SELL-B")),
+         v.names=c("BUY", "SELL"), idvar="ID",
+         times = c("A", "B"), timevar="which")
    ID TIME which         BUY        SELL
1.A  1    1     A  0.47022807  0.19770349
2.A  2    2     A -0.20672870  1.49590443
3.A  3    3     A  0.05533779  1.35319133
4.A  4    4     A -0.11471772 -0.11013896
1.B  1    1     B  1.09573107 -0.08333043
2.B  2    2     B  0.07397772 -0.98555020
3.B  3    3     B  0.25821758  0.16808307
4.B  4    4     B  1.27798740 -0.36937994

-Deepayan



More information about the R-help mailing list