Section 40 Reshape Data: base::reshape

40.1 Use of reshape

reshape(data, varying = NULL, 
        v.names = NULL, timevar = "time",
        idvar = "id", ids = 1:NROW(data),
        times = seq_along(varying[[1]]),
        drop = NULL, direction, new.row.names = NULL,
        sep = ".")

40.2 Example 1: One variable

set.seed(123)

ID <- paste0('S',1:5)
Sex <- sample(x = c('M','F'), size = length(ID), replace = TRUE)
Ht1 <- sample(45:55, size = length(ID), replace = FALSE)
Ht2 <- sample(60:70, size = length(ID), replace = TRUE)
Ht3 <- sample(75:85, size = length(ID), replace = TRUE)

DF <- data.frame(ID=ID, Sex=Sex, Ht1=Ht1, Ht2=Ht2, Ht3=Ht3)

# DF


# long format

lDF <- reshape(data = DF, 
               varying = c('Ht1','Ht2','Ht3'), 
               v.names = 'Height',
               times = c('1d','6m','12m'),
               timevar = 'Time', 
               idvar = c('ID', 'Sex'),
               drop = NULL,
               direction = 'long',
               new.row.names = 1:(3*nrow(DF)))

# wide format

wDF <- reshape(data = lDF, 
               timevar = 'Time', 
               idvar = c('ID', 'Sex'),
               drop = NULL,
               direction = 'wide',
               sep = '_')


40.2.1 Data


40.2.2 Data: Long format


40.2.3 Data: Wide format


40.3 Example 2: Two variables

set.seed(123)

ID <- paste0('S',1:5)
Sex <- sample(x = c('M','F'), size = length(ID), replace = TRUE)
Ht1 <- sample(45:55, size = length(ID), replace = FALSE)
Ht2 <- sample(60:70, size = length(ID), replace = TRUE)
Ht3 <- sample(75:85, size = length(ID), replace = TRUE)

Wt1 <- sample(3:6, size = length(ID), replace = TRUE)
Wt2 <- sample(8:12, size = length(ID), replace = TRUE)
Wt3 <- sample(13:18, size = length(ID), replace = TRUE)

DF <- data.frame(DF, Wt1=Wt1, Wt2=Wt2, Wt3=Wt3)

DF


# long format

lDF <- reshape(data = DF, 
               varying = list(c('Ht1','Ht2','Ht3'),
                              c('Wt1','Wt2','Wt3')),
               v.names = c('Height','Weight'),
               times = c('1d','6m','12m'),
               timevar = 'Time', 
               idvar = c('ID', 'Sex'),
               drop = NULL,
               direction = 'long',
               new.row.names = 1:(3*nrow(DF)))


# wide format

wDF <- reshape(data = lDF, 
               timevar = 'Time', 
               idvar = c('ID', 'Sex'),
               direction = 'wide',
               sep = '_')


40.3.1 Data


40.3.2 Data: Long format


40.3.3 Data: Wide format