> On 06 Apr 2015, at 08:05 , Mohammad Tanvir Ahamed via R-help 
> <r-help@r-project.org> wrote:
> 
> Hi ,�
> 
> I have a example list like follow�
> 
> 
> ############################################
> 
> lst<-list(setNames(c(1,10,50,60,70,80),c("id","id1","math","phy","che","bio")),setNames(c(2,20,45),c("id","id1","phy")),setNames(c(3,30,75),c("id","id1","bio")))
> 
> 
> My expected outcome :�
> 
> ---------------------------------------------------------------------
> 
> df<-rbind(c(1,10,50,60,70,80),c(2,20,NA,45,NA,NA),c(3,30,NA,NA,NA,75))
> 
> colnames(df)<-c("id","id1","math","phy","che","bio")
> 
> row.names(df) <- NULL
> 
> df
> 
> ############################################
> 
> 
> Any suggestion will be appreciated .�

Hmm, in principle this looks like a merge() problem, if you first convert each 
list element to a data frame. That could be painful to get right though.

You could try something like this:

> nm <- Reduce(union, lapply(lst, names)) # or just type it in
> nm
[1] "id"   "id1"  "math" "phy"  "che"  "bio" 
> blank <- setNames(rep(NA_real_, length(nm)), nm)
> fill1 <- function(x, blank) {blank[names(x)] <- x; blank}
> lapply(lst, fill1, blank)
[[1]]
  id  id1 math  phy  che  bio 
   1   10   50   60   70   80 

[[2]]
  id  id1 math  phy  che  bio 
   2   20   NA   45   NA   NA 

[[3]]
  id  id1 math  phy  che  bio 
   3   30   NA   NA   NA   75 

> do.call(rbind,lapply(lst, fill1, blank))
     id id1 math phy che bio
[1,]  1  10   50  60  70  80
[2,]  2  20   NA  45  NA  NA
[3,]  3  30   NA  NA  NA  75

(NB, this is a matrix, not a data frame, but so is your "df"!)

Notice that this does not do a proper merge on the id fields, i.e. if you have 
two different records with different grades (say one with "che" and another 
with "phy") on the same id, you get two records, not one. However, that might 
well be what you wanted.

(It is tempting to use 

> fill1 <- function(x) `[<-`(blank, names(x), x)
> lapply(lst, fill1)

which does seem to work, but should probably be avoided because of the risk of 
destructive modification.) 


> 
> Thanks in advance.
> 
> �
> 
> Best regards
> 
> 
> ...........................�
> 
> Tanvir Ahamed
> 
> G�teborg, Sweden
> 
> 
> 
> 
>       [[alternative HTML version deleted]]
> 
> ______________________________________________
> R-help@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.

-- 
Peter Dalgaard, Professor,
Center for Statistics, Copenhagen Business School
Solbjerg Plads 3, 2000 Frederiksberg, Denmark
Phone: (+45)38153501
Email: pd....@cbs.dk  Priv: pda...@gmail.com

______________________________________________
R-help@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.

Reply via email to