Reshapes double and tripple wide data.tables to long data.tables

melt_wide(data, id.vars, new.names)

Arguments

data

The input data.frame

id.vars

ID variables

new.names

The new names for the resulting columns

Value

A long data.table

References

http://stackoverflow.com/a/10170630/1270695

Author

Ananda Mahto

Examples

triplewide <- structure(list(ID = 1:4, w1d1t1 = c(4L, 3L, 2L, 2L), w1d1t2 = c(5L, 4L, 3L, 3L), w1d2t1 = c(6L, 5L, 5L, 4L), w1d2t2 = c(5L, 4L, 5L, 2L), w2d1t1 = c(6L, 5L, 4L, 3L), w2d1t2 = c(5L, 4L, 5L, 5L), w2d2t1 = c(6L, 3L, 6L, 3L), w2d2t2 = c(7L, 4L, 3L, 2L)), .Names = c("ID", "w1d1t1", "w1d1t2", "w1d2t1", "w1d2t2", "w2d1t1", "w2d1t2", "w2d2t1", "w2d2t2"), class = "data.frame", row.names = c(NA, -4L)) triplewide
#> ID w1d1t1 w1d1t2 w1d2t1 w1d2t2 w2d1t1 w2d1t2 w2d2t1 w2d2t2 #> 1 1 4 5 6 5 6 5 6 7 #> 2 2 3 4 5 4 5 4 3 4 #> 3 3 2 3 5 5 4 5 6 3 #> 4 4 2 3 4 2 3 5 3 2
triplewide.long <- melt_wide(triplewide, id.vars="ID", new.names=c("week", "day", "trial")) triplewide.long
#> ID variable value week day trial #> 1: 1 w1d1t1 4 1 1 1 #> 2: 2 w1d1t1 3 1 1 1 #> 3: 3 w1d1t1 2 1 1 1 #> 4: 4 w1d1t1 2 1 1 1 #> 5: 1 w1d1t2 5 1 1 2 #> 6: 2 w1d1t2 4 1 1 2 #> 7: 3 w1d1t2 3 1 1 2 #> 8: 4 w1d1t2 3 1 1 2 #> 9: 1 w1d2t1 6 1 2 1 #> 10: 2 w1d2t1 5 1 2 1 #> 11: 3 w1d2t1 5 1 2 1 #> 12: 4 w1d2t1 4 1 2 1 #> 13: 1 w1d2t2 5 1 2 2 #> 14: 2 w1d2t2 4 1 2 2 #> 15: 3 w1d2t2 5 1 2 2 #> 16: 4 w1d2t2 2 1 2 2 #> 17: 1 w2d1t1 6 2 1 1 #> 18: 2 w2d1t1 5 2 1 1 #> 19: 3 w2d1t1 4 2 1 1 #> 20: 4 w2d1t1 3 2 1 1 #> 21: 1 w2d1t2 5 2 1 2 #> 22: 2 w2d1t2 4 2 1 2 #> 23: 3 w2d1t2 5 2 1 2 #> 24: 4 w2d1t2 5 2 1 2 #> 25: 1 w2d2t1 6 2 2 1 #> 26: 2 w2d2t1 3 2 2 1 #> 27: 3 w2d2t1 6 2 2 1 #> 28: 4 w2d2t1 3 2 2 1 #> 29: 1 w2d2t2 7 2 2 2 #> 30: 2 w2d2t2 4 2 2 2 #> 31: 3 w2d2t2 3 2 2 2 #> 32: 4 w2d2t2 2 2 2 2 #> ID variable value week day trial
data.table::dcast(triplewide.long, ID + week + day ~ trial)
#> ID week day 1 2 #> 1: 1 1 1 4 5 #> 2: 1 1 2 6 5 #> 3: 1 2 1 6 5 #> 4: 1 2 2 6 7 #> 5: 2 1 1 3 4 #> 6: 2 1 2 5 4 #> 7: 2 2 1 5 4 #> 8: 2 2 2 3 4 #> 9: 3 1 1 2 3 #> 10: 3 1 2 5 5 #> 11: 3 2 1 4 5 #> 12: 3 2 2 6 3 #> 13: 4 1 1 2 3 #> 14: 4 1 2 4 2 #> 15: 4 2 1 3 5 #> 16: 4 2 2 3 2