[R] how to keep colnames of matrix when put it into a data frame

Bert Gunter bgunter@4567 @ending from gm@il@com
Sun Dec 9 16:29:26 CET 2018


Your names are not syntactically valid.

Consider:

> mat <- matrix(1:9, nrow = 3)
> colnames(mat) <- letters[1:3]
> mat
     a b c
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
> data.frame(x=1:3,mat)
  x a b c
1 1 1 4 7
2 2 2 5 8
3 3 3 6 9

See ?make.names, and the "Value" section of ?data.frame for how names are
constructed.

Michael's suggestion produces a matrix, not  a data frame. dimnames of
matrices apparently have different rules for validity.

Bert Gunter

"The trouble with having an open mind is that people keep coming along and
sticking things into it."
-- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )


On Sun, Dec 9, 2018 at 7:05 AM Jinsong Zhao <jszhao using yeah.net> wrote:

> Hi there,
>
> In the following mini-example, I hope to keep the column names of mat, but
> failed.
>
> # mini-example
> > mat <- matrix(1:9, nrow = 3)
> > colnames(mat) <- paste("(", 1:3, ")", sep = "")
> > mat
>      (1) (2) (3)
> [1,]   1   4   7
> [2,]   2   5   8
> [3,]   3   6   9
> > data.frame(x = 1:3, mat)
>   x X.1. X.2. X.3.
> 1 1    1    4    7
> 2 2    2    5    8
> 3 3    3    6    9
>
> Any hints will be really appreciated.
>
> Best,
> Jinsong
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.
>

	[[alternative HTML version deleted]]



More information about the R-help mailing list