Hello, I would like to ask for some advice in reformatting a data frame such as the following one: gIN <- c("A_1","A_2","A_3","A_4","B_1","B_2") bc1 <- c(1219.79, 1486.84, 1255.80, 941.87, 588.19, 304.02) bc2 <- c(319.79, 186.84, 125.80, 94.87, 1008.19, 314.02) group <- c("A","A","A","A","B","B") ex <- data.frame("gIN" = gIN, "bc1" = bc1, "bc2"=bc2, "group" = group)> exgIN bc1 bc2 group 1 A_1 1219.79 319.79 A 2 A_2 1486.84 186.84 A 3 A_3 1255.80 125.80 A 4 A_4 941.87 94.87 A 5 B_1 588.19 1008.19 B 6 B_2 304.02 314.02 B I would like to reshape this data frame where all the columns that have bc1, bc2,...etc are merged into a single column (call it bcX or something) and the other variables are kept apart, the example solution follows:> ex_reshapedgIN bcX group 1 A_1 1219.79 A 2 A_2 1486.84 A 3 A_3 1255.80 A 4 A_4 941.87 A 5 B_1 588.19 B 6 B_2 304.02 B 7 A_1 319.79 A 8 A_2 186.84 A 9 A_3 125.80 A 10 A_4 94.87 A 11 B_1 1008.19 B 12 B_2 314.02 B Does anyone know of a package, and/or command to accomplish this? Thank you [[alternative HTML version deleted]]
You can change ex <- data.frame("gIN" = gIN, "bc1" = bc1, "bc2"=bc2, "group" = group) to ex <- data.frame("gIN" = c(gIN,gIN), "bcX" = c(bc1,bc2), "group" c(group,group)) On Wed, Jun 3, 2015 at 2:27 PM, hedelhusk [via R] < ml-node+s789695n4708145h17 at n4.nabble.com> wrote:> Hello, > > I would like to ask for some advice in reformatting a data frame such as > the following one: > > > gIN <- c("A_1","A_2","A_3","A_4","B_1","B_2") > bc1 <- c(1219.79, 1486.84, 1255.80, 941.87, 588.19, 304.02) > bc2 <- c(319.79, 186.84, 125.80, 94.87, 1008.19, 314.02) > group <- c("A","A","A","A","B","B") > > ex <- data.frame("gIN" = gIN, "bc1" = bc1, "bc2"=bc2, "group" = group) > > > ex > gIN bc1 bc2 group > 1 A_1 1219.79 319.79 A > 2 A_2 1486.84 186.84 A > 3 A_3 1255.80 125.80 A > 4 A_4 941.87 94.87 A > 5 B_1 588.19 1008.19 B > 6 B_2 304.02 314.02 B > > I would like to reshape this data frame where all the columns that have > bc1, bc2,...etc are merged into a single column (call it bcX or something) > and the other variables are kept apart, the example solution follows: > > > > ex_reshaped > gIN bcX group > 1 A_1 1219.79 A > 2 A_2 1486.84 A > 3 A_3 1255.80 A > 4 A_4 941.87 A > 5 B_1 588.19 B > 6 B_2 304.02 B > 7 A_1 319.79 A > 8 A_2 186.84 A > 9 A_3 125.80 A > 10 A_4 94.87 A > 11 B_1 1008.19 B > 12 B_2 314.02 B > > Does anyone know of a package, and/or command to accomplish this? > > Thank you > > [[alternative HTML version deleted]] > > ______________________________________________ > [hidden email] <http:///user/SendEmail.jtp?type=node&node=4708145&i=0> > 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. > > > ------------------------------ > If you reply to this email, your message will be added to the discussion > below: > http://r.789695.n4.nabble.com/reshape-a-data-frame-tp4708145.html > To start a new topic under R help, email > ml-node+s789695n789696h98 at n4.nabble.com > To unsubscribe from R, click here > <http://r.789695.n4.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=789695&code=amF2YXNjcmlwdGFydDI1QGdtYWlsLmNvbXw3ODk2OTV8NTgxOTIwNTYy> > . > NAML > <http://r.789695.n4.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml> >-- View this message in context: http://r.789695.n4.nabble.com/reshape-a-data-frame-tp4708145p4708146.html Sent from the R help mailing list archive at Nabble.com. [[alternative HTML version deleted]]
I found the gather function from the tidyr package, which worked nicely: gather(ex,bcX,value, bc1:bc2) gIN group bcX value 1 A_1 A bc1 1219.79 2 A_2 A bc1 1486.84 3 A_3 A bc1 1255.80 4 A_4 A bc1 941.87 5 B_1 B bc1 588.19 6 B_2 B bc1 304.02 7 A_1 A bc2 319.79 8 A_2 A bc2 186.84 9 A_3 A bc2 125.80 10 A_4 A bc2 94.87 11 B_1 B bc2 1008.19 12 B_2 B bc2 314.02 Thanks. On Wed, Jun 3, 2015 at 5:44 PM, Jon BR <jonsleepy at gmail.com> wrote:> Hello, > > I would like to ask for some advice in reformatting a data frame such as > the following one: > > > gIN <- c("A_1","A_2","A_3","A_4","B_1","B_2") > bc1 <- c(1219.79, 1486.84, 1255.80, 941.87, 588.19, 304.02) > bc2 <- c(319.79, 186.84, 125.80, 94.87, 1008.19, 314.02) > group <- c("A","A","A","A","B","B") > > ex <- data.frame("gIN" = gIN, "bc1" = bc1, "bc2"=bc2, "group" = group) > > > ex > gIN bc1 bc2 group > 1 A_1 1219.79 319.79 A > 2 A_2 1486.84 186.84 A > 3 A_3 1255.80 125.80 A > 4 A_4 941.87 94.87 A > 5 B_1 588.19 1008.19 B > 6 B_2 304.02 314.02 B > > I would like to reshape this data frame where all the columns that have > bc1, bc2,...etc are merged into a single column (call it bcX or something) > and the other variables are kept apart, the example solution follows: > > > > ex_reshaped > gIN bcX group > 1 A_1 1219.79 A > 2 A_2 1486.84 A > 3 A_3 1255.80 A > 4 A_4 941.87 A > 5 B_1 588.19 B > 6 B_2 304.02 B > 7 A_1 319.79 A > 8 A_2 186.84 A > 9 A_3 125.80 A > 10 A_4 94.87 A > 11 B_1 1008.19 B > 12 B_2 314.02 B > > Does anyone know of a package, and/or command to accomplish this? > > Thank you >[[alternative HTML version deleted]]
Yes. This is basic stuff, and it seems unnecessary to run to packages for it, Knowledge of base R should suffice. It would appear that the OP would benefit by going through an R tutorial or two. Slightly more economical and more general -- and trickier -- than explicit concatenation, which could get to be a drag with a lot of columns, is this:> colms <- match(c("bc1","bc2"),names(ex)) > exnew <- cbind(z[,-colms],bcx=unlist(ex[,colms]))> exnewgIN group bcx bc11 A_1 A 1219.79 bc12 A_2 A 1486.84 bc13 A_3 A 1255.80 bc14 A_4 A 941.87 bc15 B_1 B 588.19 bc16 B_2 B 304.02 bc21 A_1 A 319.79 bc22 A_2 A 186.84 bc23 A_3 A 125.80 bc24 A_4 A 94.87 bc25 B_1 B 1008.19 bc26 B_2 B 314.02 Cheers, Bert Bert Gunter "Data is not information. Information is not knowledge. And knowledge is certainly not wisdom." -- Clifford Stoll On Wed, Jun 3, 2015 at 3:02 PM, javascriptart25 <javascriptart25 at gmail.com> wrote:> You can change ex <- data.frame("gIN" = gIN, "bc1" = bc1, "bc2"=bc2, > "group" = group) > > to > > ex <- data.frame("gIN" = c(gIN,gIN), "bcX" = c(bc1,bc2), "group" > c(group,group)) > > > On Wed, Jun 3, 2015 at 2:27 PM, hedelhusk [via R] < > ml-node+s789695n4708145h17 at n4.nabble.com> wrote: > > > Hello, > > > > I would like to ask for some advice in reformatting a data frame such as > > the following one: > > > > > > gIN <- c("A_1","A_2","A_3","A_4","B_1","B_2") > > bc1 <- c(1219.79, 1486.84, 1255.80, 941.87, 588.19, 304.02) > > bc2 <- c(319.79, 186.84, 125.80, 94.87, 1008.19, 314.02) > > group <- c("A","A","A","A","B","B") > > > > ex <- data.frame("gIN" = gIN, "bc1" = bc1, "bc2"=bc2, "group" = group) > > > > > ex > > gIN bc1 bc2 group > > 1 A_1 1219.79 319.79 A > > 2 A_2 1486.84 186.84 A > > 3 A_3 1255.80 125.80 A > > 4 A_4 941.87 94.87 A > > 5 B_1 588.19 1008.19 B > > 6 B_2 304.02 314.02 B > > > > I would like to reshape this data frame where all the columns that have > > bc1, bc2,...etc are merged into a single column (call it bcX or > something) > > and the other variables are kept apart, the example solution follows: > > > > > > > ex_reshaped > > gIN bcX group > > 1 A_1 1219.79 A > > 2 A_2 1486.84 A > > 3 A_3 1255.80 A > > 4 A_4 941.87 A > > 5 B_1 588.19 B > > 6 B_2 304.02 B > > 7 A_1 319.79 A > > 8 A_2 186.84 A > > 9 A_3 125.80 A > > 10 A_4 94.87 A > > 11 B_1 1008.19 B > > 12 B_2 314.02 B > > > > Does anyone know of a package, and/or command to accomplish this? > > > > Thank you > > > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > [hidden email] <http:///user/SendEmail.jtp?type=node&node=4708145&i=0> > > 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. > > > > > > ------------------------------ > > If you reply to this email, your message will be added to the discussion > > below: > > http://r.789695.n4.nabble.com/reshape-a-data-frame-tp4708145.html > > To start a new topic under R help, email > > ml-node+s789695n789696h98 at n4.nabble.com > > To unsubscribe from R, click here > > < > http://r.789695.n4.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=789695&code=amF2YXNjcmlwdGFydDI1QGdtYWlsLmNvbXw3ODk2OTV8NTgxOTIwNTYy > > > > . > > NAML > > < > http://r.789695.n4.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml > > > > > > > > > -- > View this message in context: > http://r.789695.n4.nabble.com/reshape-a-data-frame-tp4708145p4708146.html > Sent from the R help mailing list archive at Nabble.com. > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at 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]]