Reputation: 1683
I want to create a panel dataset in R, I have data in wide format:
week dvar1 dvar2 ivar1 ivar2
12 7 9 220 500
13 4 5 200 400
...
I want to create a new dataset for mixed level modelling where combination of dvar and week as the id values i.e
week dvar value ivar1 ivar2
12 dvar1 7 220 500
13 dvar1 4 200 400
12 dvar2 9 220 500
13 dvar2 5 200 400
...
I know I have to use some combination of melt and cast but I'm not sure.
Upvotes: 2
Views: 128
Reputation: 20473
Using the tidyr
package:
library(tidyr)
df %>%
gather(key = dvar, value = value, -c(week, ivar1, ivar2))
# week ivar1 ivar2 dvar value
# 1 12 220 500 dvar1 7
# 2 13 200 400 dvar1 4
# 3 12 220 500 dvar2 9
# 4 13 200 400 dvar2 5
Alternative:
df %>%
gather(key = dvar, value = value, starts_with("dvar"))
Upvotes: 1
Reputation: 887691
We can use melt
library(data.table)
melt(setDT(df1), measure=patterns("^dvar"), variable.name="dvar")
# week ivar1 ivar2 dvar value1
#1: 12 220 500 dvar1 7
#2: 13 200 400 dvar1 4
#3: 12 220 500 dvar2 9
#4: 13 200 400 dvar2 5
Upvotes: 1