reichm@@j m@iii@g oii sbcgiob@i@@et
2019-Aug-12 23:22 UTC
[R] separate and gather functions
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]]
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 On Mon, Aug 12, 2019 at 4:23 PM <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 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-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]]