-2

A data set similar to this...

    ID <- c(rep(10,4),rep(20,4),rep(30,4),rep(40,4),rep(50,4))
    Activity <- rep(c("In","Start","Finish","Out"),5)
    Rsn <- c(rep("Rsn1",4),rep("Rsn11",4),rep("Rsn111",4),rep("Rsn11",4),rep("Rsn111",4))
    Inst <- seq(1,20,1)
    Loc <- c(rep("Here",4),rep("There",4),rep("Anywhere",4),rep("Somewhere",4),rep("SomewhereElse",4))
    dc <- data.frame(ID,Activity,Rsn,Inst,Loc)

ID  Activity  Rsn     Inst  Loc 
10  In        Rsn1    1     Here
10  Start     Rsn1    2     Here
10  Finish    Rsn1    3     Here
10  Out       Rsn1    4     Here
20  In        Rsn11   5     There
20  Start     Rsn11   6     There
20  Finish    Rsn11   7     There
20  Out       Rsn11   8     There
30  In        Rsn111  9     Anywhere
30  Start     Rsn111  10    Anywhere
30  Finish    Rsn111  11    Anywhere
30  Out       Rsn111  12    Anywhere
40  In        Rsn11   13    Somewhere
40  Start     Rsn11   14    Somewhere
40  Finish    Rsn11   15    Somewhere
40  Out       Rsn11   16    Somewhere
50  In        Rsn111  17    SomewhereElse
50  Start     Rsn111  18    SomewhereElse
50  Finish    Rsn111  19    SomewhereElse
50  Out       Rsn111  20    SomewhereElse

the end result that I would like to end up with is this...

ID2 <- c(10,20,30,40,50)
In2 <- seq(1,20,4)
Start2 <- seq(2,20,4)
Finish2 <- seq(3,20,4)
Out2 <- seq(4,20,4)
Rsn2 <- c("Rsn1","Rsn11","Rsn111","Rsn11","Rsn111")
Loc2 <- c("Here","There","Anywhere","Somewhere","SomewhereElse")
dw <- data.frame(ID2, In2, Start2, Finish2, Out2, Rsn2,Loc2)

ID  In2  Start2 Finish2 Out2  Rsn2    Loc2  
10  1    2      3       4     Rsn1    Here
20  5    6      7       8     Rsn11   There
30  9    10     11      12    Rsn111  Anywhere
40  13   14     15      16    Rsn11   Somewhere
50  17   18     19      20    Rsn111  SomewhereElse

I have used tidyr, reshape and can't seem to get it right.

The data set has 816K lines and takes forever with loops and conditionals.

I have broken the dataset down by the locations, but it is still slow.

Thanks in advance.

wfvdc1
  • 31
  • 3

1 Answers1

0

we can use dcast

library(data.table)
dcast(setDT(dc), ID+Rsn+Loc~Activity, value.var = "Inst")
akrun
  • 874,273
  • 37
  • 540
  • 662