Hi R-experts, suppose I have a list with containing data frame elements: [[1]] (Intercept) y1 y2 y3 y4 -6.64 0.761 0.383 0.775 0.163 [[2]] (Intercept) y2 y3 -3.858 0.854 0.834 Now I want to put them into ONE dataframe like this: (Intercept) y1 y2 y3 y4 1 -6.64 0.761 0.383 0.775 0.163 2 -3.858 NA 0.854 0.834 NA The problem I encounter is that not always all possible columns (Intercept, y1, y2, y3, y4) exist or at least have NA entries . I cannot figure out how (e.g. with merge)... TIA, Mark -- Mark Heckmann (Dipl. Wirt.-Ing.) phone +49 (0) 421/1614618 Sensationsangebot verl?ngert: GMX FreeDSL - Telefonanschluss + DSL f?r nur 16,37 Euro/mtl.!* http://dsl.gmx.de/?ac=OM.AD.PD003K1308T4569a
Rowe, Brian Lee Yung (Portfolio Analytics)
2008-Dec-29 17:12 UTC
[R] Merge or combine data frames with missing columns
Mark, I think ?rbind should work for you. Regards, Brian -----Original Message----- From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf Of Mark Heckmann Sent: Monday, December 29, 2008 9:18 AM To: r-help at r-project.org Subject: [R] Merge or combine data frames with missing columns Hi R-experts, suppose I have a list with containing data frame elements: [[1]] (Intercept) y1 y2 y3 y4 -6.64 0.761 0.383 0.775 0.163 [[2]] (Intercept) y2 y3 -3.858 0.854 0.834 Now I want to put them into ONE dataframe like this: (Intercept) y1 y2 y3 y4 1 -6.64 0.761 0.383 0.775 0.163 2 -3.858 NA 0.854 0.834 NA The problem I encounter is that not always all possible columns (Intercept, y1, y2, y3, y4) exist or at least have NA entries . I cannot figure out how (e.g. with merge)... TIA, Mark -- Mark Heckmann (Dipl. Wirt.-Ing.) phone +49 (0) 421/1614618 Sensationsangebot verl?ngert: GMX FreeDSL - Telefonanschluss + DSL f?r nur 16,37 Euro/mtl.!* http://dsl.gmx.de/?ac=OM.AD.PD003K1308T4569a ______________________________________________ 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. -------------------------------------------------------------------------- This message w/attachments (message) may be privileged, confidential or proprietary, and if you are not an intended recipient, please notify the sender, do not use or share it and delete it. Unless specifically indicated, this message is not an offer to sell or a solicitation of any investment products or other financial product or service, an official confirmation of any transaction, or an official statement of Merrill Lynch. Subject to applicable law, Merrill Lynch may monitor, review and retain e-communications (EC) traveling through its networks/systems. The laws of the country of each sender/recipient may impact the handling of EC, and EC may be archived, supervised and produced in countries other than the country in which you are located. This message cannot be guaranteed to be secure or error-free. This message is subject to terms available at the following link: http://www.ml.com/e-communications_terms/. By messaging with Merrill Lynch you consent to the foregoing. --------------------------------------------------------------------------
Charles C. Berry
2008-Dec-29 18:09 UTC
[R] Merge or combine data frames with missing columns
On Mon, 29 Dec 2008, Mark Heckmann wrote:> > Hi R-experts, > > suppose I have a list with containing data frame elements: > > [[1]] > (Intercept) y1 y2 y3 y4 > -6.64 0.761 0.383 0.775 0.163 > > [[2]] > (Intercept) y2 y3 > -3.858 0.854 0.834 > > Now I want to put them into ONE dataframe like this: > (Intercept) y1 y2 y3 y4 > 1 -6.64 0.761 0.383 0.775 0.163 > 2 -3.858 NA 0.854 0.834 NA > > The problem I encounter is that not always all possible columns (Intercept, y1, y2, y3, y4) exist or at least have NA entries . > > I cannot figure out how (e.g. with merge)...Just use a nested for loop:> my.list <- list(c(a=1,b=2,c=3),c(a=10,b=20),c(g=7,h=8)) > dat <- data.frame() > for(i in seq(along=my.list)) for(j in names(my.list[[i]])) dat[i,j] <- my.list[[i]][j]If what you actually wanted was a _matrix_, and if it is rather large, faster solutions might be possible using tapply or sapply. HTH, Chuck> > TIA, Mark > > > -- > Mark Heckmann (Dipl. Wirt.-Ing.) > phone +49 (0) 421/1614618 > > Sensationsangebot verl?ngert: GMX FreeDSL - Telefonanschluss + DSL > f?r nur 16,37 Euro/mtl.!* http://dsl.gmx.de/?ac=OM.AD.PD003K1308T4569a > > ______________________________________________ > 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. >Charles C. Berry (858) 534-2098 Dept of Family/Preventive Medicine E mailto:cberry at tajo.ucsd.edu UC San Diego http://famprevmed.ucsd.edu/faculty/cberry/ La Jolla, San Diego 92093-0901
Lauri Nikkinen
2008-Dec-29 18:11 UTC
[R] Merge or combine data frames with missing columns
How about this solution g1 <- data.frame(ic = 1, y1 = 2, y2 = 3, y3 = 4, y4 = 5) g2 <- data.frame(ic = 2, y2 = 6, y3 = 7) g <- list(g1, g2) library(gregmisc) do.call(smartbind, g) -Lauri
Henrique Dallazuanna
2008-Dec-29 18:17 UTC
[R] Merge or combine data frames with missing columns
Try this: do.call(rbind, lapply(l, "[", unique(unlist(sapply(l, names))))) Where "l" is your list. On Mon, Dec 29, 2008 at 12:18 PM, Mark Heckmann <mark.heckmann@gmx.de>wrote:> > Hi R-experts, > > suppose I have a list with containing data frame elements: > > [[1]] > (Intercept) y1 y2 y3 y4 > -6.64 0.761 0.383 0.775 0.163 > > [[2]] > (Intercept) y2 y3 > -3.858 0.854 0.834 > > Now I want to put them into ONE dataframe like this: > (Intercept) y1 y2 y3 y4 > 1 -6.64 0.761 0.383 0.775 0.163 > 2 -3.858 NA 0.854 0.834 NA > > The problem I encounter is that not always all possible columns (Intercept, > y1, y2, y3, y4) exist or at least have NA entries . > > I cannot figure out how (e.g. with merge)... > > TIA, Mark > > > -- > Mark Heckmann (Dipl. Wirt.-Ing.) > phone +49 (0) 421/1614618 > > Sensationsangebot verlängert: GMX FreeDSL - Telefonanschluss + DSL > für nur 16,37 Euro/mtl.!* http://dsl.gmx.de/?ac=OM.AD.PD003K1308T4569a > > ______________________________________________ > R-help@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. >-- Henrique Dallazuanna Curitiba-Paraná-Brasil 25° 25' 40" S 49° 16' 22" O [[alternative HTML version deleted]]