reichm@@j m@iii@g oii sbcgiob@i@@et
2019-Aug-13 02:46 UTC
[R] separate and gather functions
William Yes that works a little better as I don?t have to create notional variables. Thank you Jeff From: William Dunlap <wdunlap at tibco.com> Sent: Monday, August 12, 2019 6:46 PM To: Jeff Reichman <reichmanj at sbcglobal.net> Cc: r-help at r-project.org Subject: Re: [R] separate and gather functions This one uses only core R functions. Does that count toward "elegance"?> # your data, I assume, in a form one can copy and paste into R> d <- data.frame(stringsAsFactors = FALSE,Col1 = c("Agency A", "Agency B", "Agency C"), Col2 = c("Function1, Function2, Function3, Function4", "Function2, Function4", "Function1, Function3, Function4"))> # split Col2 by comma following by any number of spaces> tmp <- strsplit(d$Col2, split=", *") > data.frame(Col1 = rep(d$Col1, lengths(tmp)), Col2 = unlist(tmp), stringsAsFactors=FALSE)Col1 Col2 1 Agency A Function1 2 Agency A Function2 3 Agency A Function3 4 Agency A Function4 5 Agency B Function2 6 Agency B Function4 7 Agency C Function1 8 Agency C Function3 9 Agency C Function4 Bill Dunlap TIBCO Software wdunlap tibco.com <http://tibco.com> On Mon, Aug 12, 2019 at 4:23 PM <reichmanj at sbcglobal.net <mailto:reichmanj at sbcglobal.net> > wrote: R-Help Forum I have a data set from which I have extracted two columns Column 1 is a listing of Federal agencies and Column 2 lists functions like this Col1 Col2 Agency A Function1, Function2, Function3, Function4 Agency B Function2, Function4 Agency C Function1, Function3, Function4 What I need is a long list like this Col1 Col2 Agency A Function1 Agency A Function2 Agency 4 Function3 etc Is there a more elegant /efficient way other than what I did which was to separate Col2 into separate columns and then gather the data back up myDat3 <- separate(data= myDat2, col = type, into = c("x1", "x2", "x3", "x4", "x5"), sep = ",") myDat4 <- gather(data=myDat3, key="type", value = "Value", "x1","x2","x3","x4","x5", na.rm = TRUE) while it works, looking for a more elegant solution, if there is one Jeff [[alternative HTML version deleted]] ______________________________________________ R-help at r-project.org <mailto: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]]
How about> library(tidyr) > separate_rows(d, Col2)Col1 Col2 1 Agency A Function1 2 Agency A Function2 3 Agency A Function3 4 Agency A Function4 5 Agency B Function2 6 Agency B Function4 7 Agency C Function1 8 Agency C Function3 9 Agency C Function4 On Mon, Aug 12, 2019 at 11:06 PM <reichmanj at sbcglobal.net> wrote:> > William > > > > Yes that works a little better as I don?t have to create notional variables. Thank you > > > > Jeff > > > > From: William Dunlap <wdunlap at tibco.com> > Sent: Monday, August 12, 2019 6:46 PM > To: Jeff Reichman <reichmanj at sbcglobal.net> > Cc: r-help at r-project.org > Subject: Re: [R] separate and gather functions > > > > This one uses only core R functions. Does that count toward "elegance"? > > > > > # your data, I assume, in a form one can copy and paste into R > > > d <- data.frame(stringsAsFactors = FALSE, > Col1 = c("Agency A", "Agency B", "Agency C"), > Col2 = c("Function1, Function2, Function3, Function4", > "Function2, Function4", "Function1, Function3, Function4")) > > > # split Col2 by comma following by any number of spaces > > > tmp <- strsplit(d$Col2, split=", *") > > data.frame(Col1 = rep(d$Col1, lengths(tmp)), Col2 = unlist(tmp), stringsAsFactors=FALSE) > Col1 Col2 > 1 Agency A Function1 > 2 Agency A Function2 > 3 Agency A Function3 > 4 Agency A Function4 > 5 Agency B Function2 > 6 Agency B Function4 > 7 Agency C Function1 > 8 Agency C Function3 > 9 Agency C Function4 > > > > Bill Dunlap > TIBCO Software > wdunlap tibco.com <http://tibco.com> > > > > > > On Mon, Aug 12, 2019 at 4:23 PM <reichmanj at sbcglobal.net <mailto:reichmanj at sbcglobal.net> > wrote: > > R-Help Forum > > > > I have a data set from which I have extracted two columns Column 1 is a > listing of Federal agencies and Column 2 lists functions like this > > > > Col1 Col2 > > Agency A Function1, Function2, Function3, Function4 > > Agency B Function2, Function4 > > Agency C Function1, Function3, Function4 > > > > What I need is a long list like this > > > > Col1 Col2 > > Agency A Function1 > > Agency A Function2 > > Agency 4 Function3 etc > > > > Is there a more elegant /efficient way other than what I did which was to > separate Col2 into separate columns and then gather the data back up > > > > myDat3 <- separate(data= myDat2, col = type, into = c("x1", "x2", "x3", > "x4", "x5"), sep = ",") > > myDat4 <- gather(data=myDat3, key="type", value = "Value", > "x1","x2","x3","x4","x5", na.rm = TRUE) > > > > while it works, looking for a more elegant solution, if there is one > > > > Jeff > > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org <mailto: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]] > > ______________________________________________ > 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.
Chapeau Ista :-) On Tue, Aug 13, 2019 at 4:22 PM Ista Zahn <istazahn at gmail.com> wrote:> How about > > > library(tidyr) > > separate_rows(d, Col2) > Col1 Col2 > 1 Agency A Function1 > 2 Agency A Function2 > 3 Agency A Function3 > 4 Agency A Function4 > 5 Agency B Function2 > 6 Agency B Function4 > 7 Agency C Function1 > 8 Agency C Function3 > 9 Agency C Function4 > > > On Mon, Aug 12, 2019 at 11:06 PM <reichmanj at sbcglobal.net> wrote: > > > > William > > > > > > > > Yes that works a little better as I don?t have to create notional > variables. Thank you > > > > > > > > Jeff > > > > > > > > From: William Dunlap <wdunlap at tibco.com> > > Sent: Monday, August 12, 2019 6:46 PM > > To: Jeff Reichman <reichmanj at sbcglobal.net> > > Cc: r-help at r-project.org > > Subject: Re: [R] separate and gather functions > > > > > > > > This one uses only core R functions. Does that count toward "elegance"? > > > > > > > > > # your data, I assume, in a form one can copy and paste into R > > > > > d <- data.frame(stringsAsFactors = FALSE, > > Col1 = c("Agency A", "Agency B", "Agency C"), > > Col2 = c("Function1, Function2, Function3, Function4", > > "Function2, Function4", "Function1, Function3, Function4")) > > > > > # split Col2 by comma following by any number of spaces > > > > > tmp <- strsplit(d$Col2, split=", *") > > > data.frame(Col1 = rep(d$Col1, lengths(tmp)), Col2 = unlist(tmp), > stringsAsFactors=FALSE) > > Col1 Col2 > > 1 Agency A Function1 > > 2 Agency A Function2 > > 3 Agency A Function3 > > 4 Agency A Function4 > > 5 Agency B Function2 > > 6 Agency B Function4 > > 7 Agency C Function1 > > 8 Agency C Function3 > > 9 Agency C Function4 > > > > > > > > Bill Dunlap > > TIBCO Software > > wdunlap tibco.com <http://tibco.com> > > > > > > > > > > > > On Mon, Aug 12, 2019 at 4:23 PM <reichmanj at sbcglobal.net <mailto: > reichmanj at sbcglobal.net> > wrote: > > > > R-Help Forum > > > > > > > > I have a data set from which I have extracted two columns Column 1 is a > > listing of Federal agencies and Column 2 lists functions like this > > > > > > > > Col1 Col2 > > > > Agency A Function1, Function2, Function3, Function4 > > > > Agency B Function2, Function4 > > > > Agency C Function1, Function3, Function4 > > > > > > > > What I need is a long list like this > > > > > > > > Col1 Col2 > > > > Agency A Function1 > > > > Agency A Function2 > > > > Agency 4 Function3 etc > > > > > > > > Is there a more elegant /efficient way other than what I did which was to > > separate Col2 into separate columns and then gather the data back up > > > > > > > > myDat3 <- separate(data= myDat2, col = type, into = c("x1", "x2", "x3", > > "x4", "x5"), sep = ",") > > > > myDat4 <- gather(data=myDat3, key="type", value = "Value", > > "x1","x2","x3","x4","x5", na.rm = TRUE) > > > > > > > > while it works, looking for a more elegant solution, if there is one > > > > > > > > Jeff > > > > > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > R-help at r-project.org <mailto: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]] > > > > ______________________________________________ > > 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. > > ______________________________________________ > 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]]
reichm@@j m@iii@g oii sbcgiob@i@@et
2019-Aug-14 13:06 UTC
[R] separate and gather functions
That's even easier -----Original Message----- From: Ista Zahn <istazahn at gmail.com> Sent: Tuesday, August 13, 2019 8:22 AM To: reichmanj at sbcglobal.net Cc: William Dunlap <wdunlap at tibco.com>; r-help at r-project.org Subject: Re: [R] separate and gather functions How about> library(tidyr) > separate_rows(d, Col2)Col1 Col2 1 Agency A Function1 2 Agency A Function2 3 Agency A Function3 4 Agency A Function4 5 Agency B Function2 6 Agency B Function4 7 Agency C Function1 8 Agency C Function3 9 Agency C Function4 On Mon, Aug 12, 2019 at 11:06 PM <reichmanj at sbcglobal.net> wrote:> > William > > > > Yes that works a little better as I don?t have to create notional > variables. Thank you > > > > Jeff > > > > From: William Dunlap <wdunlap at tibco.com> > Sent: Monday, August 12, 2019 6:46 PM > To: Jeff Reichman <reichmanj at sbcglobal.net> > Cc: r-help at r-project.org > Subject: Re: [R] separate and gather functions > > > > This one uses only core R functions. Does that count toward "elegance"? > > > > > # your data, I assume, in a form one can copy and paste into R > > > d <- data.frame(stringsAsFactors = FALSE, > Col1 = c("Agency A", "Agency B", "Agency C"), > Col2 = c("Function1, Function2, Function3, Function4", > "Function2, Function4", "Function1, Function3, Function4")) > > > # split Col2 by comma following by any number of spaces > > > tmp <- strsplit(d$Col2, split=", *") > > data.frame(Col1 = rep(d$Col1, lengths(tmp)), Col2 = unlist(tmp), > > stringsAsFactors=FALSE) > Col1 Col2 > 1 Agency A Function1 > 2 Agency A Function2 > 3 Agency A Function3 > 4 Agency A Function4 > 5 Agency B Function2 > 6 Agency B Function4 > 7 Agency C Function1 > 8 Agency C Function3 > 9 Agency C Function4 > > > > Bill Dunlap > TIBCO Software > wdunlap tibco.com <http://tibco.com> > > > > > > On Mon, Aug 12, 2019 at 4:23 PM <reichmanj at sbcglobal.net <mailto:reichmanj at sbcglobal.net> > wrote: > > R-Help Forum > > > > I have a data set from which I have extracted two columns Column 1 is > a listing of Federal agencies and Column 2 lists functions like this > > > > Col1 Col2 > > Agency A Function1, Function2, Function3, Function4 > > Agency B Function2, Function4 > > Agency C Function1, Function3, Function4 > > > > What I need is a long list like this > > > > Col1 Col2 > > Agency A Function1 > > Agency A Function2 > > Agency 4 Function3 etc > > > > Is there a more elegant /efficient way other than what I did which was > to separate Col2 into separate columns and then gather the data back > up > > > > myDat3 <- separate(data= myDat2, col = type, into = c("x1", "x2", > "x3", "x4", "x5"), sep = ",") > > myDat4 <- gather(data=myDat3, key="type", value = "Value", > "x1","x2","x3","x4","x5", na.rm = TRUE) > > > > while it works, looking for a more elegant solution, if there is one > > > > Jeff > > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org <mailto: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]] > > ______________________________________________ > 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.