[R] Coerce rectangular matrix to symmetrical square matrix
Dimitris Rizopoulos
d.rizopoulos at erasmusmc.nl
Wed Jun 17 20:02:18 CEST 2009
one way is the following:
mat <- matrix(1:12, 3, 4, TRUE)
dimnames(mat) <- list(c("A", "E", "F"), LETTERS[1:4])
cnams <- colnames(mat)
rnams <- rownames(mat)
unq.nams <- unique(c(cnams, rnams))
out <- matrix(0, length(unq.nams), length(unq.nams),
dimnames = list(unq.nams, unq.nams))
p1 <- paste(cnams[col(mat)], rnams[row(mat)], sep = "\\")
p2 <- paste(unq.nams[col(out)], unq.nams[row(out)], sep = "\\")
out[match(p1, p2)] <- mat
out <- out + t(out)
diag(out) <- diag(out)/2
out
I hope it helps.
Best,
Dimitris
Nathan S. Watson-Haigh wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> I have a rectangular matrix of size 920 by 85. I'd like to coerce it into a
> square matrix such that all row/col names are present in the new matrix and the
> additional values are zero.
>
> As an example:
>
> A B C D
> A 1 2 3 4
> E 5 6 7 8
> F 9 10 11 12
>
> Would be coerced to:
> A B C D E F
> A 1 2 3 4 5 9
> B 2 0 0 0 6 10
> C 3 0 0 0 7 11
> D 4 0 0 0 8 12
> E 5 6 7 8 0 0
> F 9 10 11 12 0 0
>
> Any thoughts on how to achieve this?
>
> Cheers,
> Nathan
>
>
> - --
> - --------------------------------------------------------
> Dr. Nathan S. Watson-Haigh
> OCE Post Doctoral Fellow
> CSIRO Livestock Industries
> Queensland Bioscience Precinct
> St Lucia, QLD 4067
> Australia
>
> Tel: +61 (0)7 3214 2922
> Fax: +61 (0)7 3214 2900
> Web: http://www.csiro.au/people/Nathan.Watson-Haigh.html
> - --------------------------------------------------------
>
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.9 (MingW32)
> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
>
> iEYEARECAAYFAko4fvEACgkQ9gTv6QYzVL5gywCgsOpHJpTUXW98oHJ7jsSlo47X
> mToAoI08QcZHvOgSFteqmQ/acAwDkaiR
> =Hyod
> -----END PGP SIGNATURE-----
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
--
Dimitris Rizopoulos
Assistant Professor
Department of Biostatistics
Erasmus University Medical Center
Address: PO Box 2040, 3000 CA Rotterdam, the Netherlands
Tel: +31/(0)10/7043478
Fax: +31/(0)10/7043014
More information about the R-help
mailing list