[R] Adding collumn to existing data frame

Jeff Newmiller jdnewmil at dcn.davis.ca.us
Wed Aug 4 06:53:53 CEST 2010


Sometimes we try to make things behave the way we think they ought to and find it surprisingly difficult. Later we discover that our original premise was flawed and we wasted our time trying to force fit our ideas to work.

Since all of the i-th elements of the columns of a data table are supposed to correspond to each other, the information content of adding a value corresponding to a bunch of NAs is practically zero, so that the value of the effort put into doing so is practically zero as well.

If your information relationships are really this sparse you may be better off assembling your data in "melted" form to begin with (c.f. "melt" in package "reshape"). Alternately, perhaps you should be creating multiple data frames (and optionally using "merge" to bring them all together later).

If there is no implied correspondence between the i-th elements in each vector, perhaps you should just be using named elements in a list to hold the vectors instead of using a data frame.

"Ralf B" <ralf.bierig at gmail.com> wrote:

>Hi experts,
>
>I am trying to write a very flexible method that allows me to add a
>new column to an existing data frame. This is what I have so far:
>
>add.column <- function(df, new.col, name) {
>	n.row <- dim(df)[1]
>	length(new.col) <- n.row
>	names(new.col) <- name
>	return(cbind(df, new.col))
>}
>
>df <- NULL
>df <- data.frame(a=c(1,2,3))
>df
># corect: added NA to new collumn
>df <- add.column(df,c(1,2),'myNewColumn2')
>df
># problem: not added, data frame should be extended with NAs
>add.column(df,c(1,2,3,4),'myNewColumn3')
>df
>
>
>However, there are two problems:
>
>1) The column name is not renamed accurately but always set to
>'new.col' . Surely this could be done outside the function, but it
>would be better if its self contained.
>2) It does not work for cases where new.col is longer than the length
>of the data frame. In such cases, I would like to add NA's to the data
>frame if it has less rows.
>
>Any ideas to to solve this?
>
>Ralf
>
>______________________________________________
>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.

---------------------------------------------------------------------------
Jeff Newmiller                        The     .....       .....  Go Live...
DCN:<jdnewmil at dcn.davis.ca.us>        Basics: ##.#.       ##.#.  Live Go...
                                      Live:   OO#.. Dead: OO#..  Playing
Research Engineer (Solar/Batteries            O.O#.       #.O#.  with
/Software/Embedded Controllers)               .OO#.       .OO#.  rocks...1k
---------------------------------------------------------------------------
Sent from my phone. Please excuse my brevity.



More information about the R-help mailing list