Skip to content
Prev 246610 / 398506 Next

How to join matrices of different row length from a list

On Thu, Jan 6, 2011 at 5:56 AM, emj83 <stp08emj at shef.ac.uk> wrote:
One reasonably simple approach is to convert your matrices to time
series (either ts series or zoo series) as cbind.ts and cbind.zoo both
NA fill.

L <- list(matrix(1:4, 2, 2), matrix(1:6, 3, 2), matrix(2:1, 1, 2))


# using ts
M <- unclass(do.call(cbind, lapply(L, ts)))
tsp(M) <- colnames(M) <- NULL

# With zoo its slightly shorter:

library(zoo)
M <- coredata(do.call(cbind, lapply(L, zoo)))
colnames(M) <- NULL


We can omit the colnames(M) <- NULL part in both cases if the list
itself or the constituent matrices have column names, e.g.

L <- list(A = matrix(1:4, 2, 2), B = matrix(1:6, 3, 2), C = matrix(2:1, 1, 2))

# or

L <- list(cbind(a = 1:2, b = 3:4), cbind(c = 1:3, d = 4:6), cbind(e = 2, f = 1))