user124123
user124123

Reputation: 1683

Create multilevel panel dataset in R

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

Answers (2)

JasonAizkalns
JasonAizkalns

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

akrun
akrun

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

Related Questions