On 2020-06-10 13:14 -0700, Bert Gunter wrote: > On Wed, Jun 10, 2020 at 11:48 AM Alejandro Ureta wrote: > > > > hi, I am trying to fuse (cbind, merge... > > NOT rbind) several dataframes with > > different numbers of rows, all df > > included in a list, and using the code > > extract shown below. The function merge() > > works well with two df but not more than > > two...I have 85 dataframes to join in > > this way (85 df in the list)....could you > > please let me know how to get all 85 df > > merged ?,,,,, thanks > > > > fusion_de_tablas = merge(red_tablas_por_punto[["1 - Bv.Artigas y la Rambla > > (Terminal CUTCSA)"]], > > red_tablas_por_punto[["10 - Avenida Millán 2515 (Hospital Vilardebó)"]], > > red_tablas_por_punto[["100 - Fauquet 6358 (Hospital Saint Bois)"]], > > by= 'toma_de_muestras', all = T ) > > ?do.call -- takes a list of arguments to a function > ... as in > do.call(merge, yourlist) ## or similar perhaps
Dear Alejandro, it would be easier to help you if you provided some example of how fusion_de_tablas looks like. Here is a small example on uniting some odd sized dataframes with some common and some differently named columns. red_tablas_por_punto <- list( "1 - Bv.Artigas y la Rambla (Terminal CUTCSA)" = data.frame("a"=1:3, "b"=4:6, "c"=4:6, 'toma_de_muestras'=1), "10 - Avenida Millán 2515 (Hospital Vilardebó)" = data.frame("d"=4:8, "b"=8:12, 'toma_de_muestras'=7), "100 - Fauquet 6358 (Hospital Saint Bois)" = data.frame("e"=100:101, "a"=85:86, 'toma_de_muestras'=4) ) unified.df <- lapply(names(red_tablas_por_punto), function(tabla, cn) { x <- red_tablas_por_punto[[tabla]] x[,cn[!(cn %in% colnames(x))]] <- NA x <- x[,cn] x$tabla <- tabla return(x) }, cn=unique(unlist(lapply(red_tablas_por_punto, colnames)))) unified.df <- do.call(rbind, unified.df) unified.df which yields a b c toma_de_muestras d e tabla 1 1 4 4 1 NA NA 1 - Bv.Artigas y la Rambla (Terminal CUTCSA) 2 2 5 5 1 NA NA 1 - Bv.Artigas y la Rambla (Terminal CUTCSA) 3 3 6 6 1 NA NA 1 - Bv.Artigas y la Rambla (Terminal CUTCSA) 4 NA 8 NA 7 4 NA 10 - Avenida Millán 2515 (Hospital Vilardebó) 5 NA 9 NA 7 5 NA 10 - Avenida Millán 2515 (Hospital Vilardebó) 6 NA 10 NA 7 6 NA 10 - Avenida Millán 2515 (Hospital Vilardebó) 7 NA 11 NA 7 7 NA 10 - Avenida Millán 2515 (Hospital Vilardebó) 8 NA 12 NA 7 8 NA 10 - Avenida Millán 2515 (Hospital Vilardebó) 9 85 NA NA 4 NA 100 100 - Fauquet 6358 (Hospital Saint Bois) 10 86 NA NA 4 NA 101 100 - Fauquet 6358 (Hospital Saint Bois) I also found that [1] you could use merge like you tried with Reduce, like Reduce(function(x, y) merge(x, y, by='toma_de_muestras', all=T), red_tablas_por_punto) which yields toma_de_muestras a.x b.x c d b.y e a.y 1 10001 1 4 4 NA NA NA NA 2 10002 2 5 5 NA NA NA NA 3 10003 3 6 6 NA NA NA NA 4 10004 NA NA NA 4 8 NA NA 5 10005 NA NA NA 5 9 NA NA 6 10006 NA NA NA 6 10 NA NA 7 10007 NA NA NA 7 11 NA NA 8 10008 NA NA NA 8 12 NA NA 9 10009 NA NA NA NA NA 100 85 10 10010 NA NA NA NA NA 101 86 where the semi-common “a” column does not become unified ... thus, I like my initial step-by-step apply-based solution better ... Best, Rasmus [1] https://stackoverflow.com/questions/22644780/merging-multiple-csv-files-in-r-using-do-call
signature.asc
Description: PGP signature
______________________________________________ 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.