Kristi Glover
2015-Jan-22 17:52 UTC
[R] How to split a data table into multiple tables based on column (unique value) and save them separately
How to split a data table into multiple tables based on column (unique value) and save them separately ? For example: dat<-structure(list(name = structure(c(1L, 1L, 1L, 2L, 2L, 3L, 3L, 4L), .Label = c("A", "B", "C", "D"), class = "factor"), date = structure(c(6L, 7L, 8L, 1L, 2L, 3L, 4L, 5L), .Label = c("5/10/2011", "5/11/2011", "5/12/2011", "5/13/2011", "5/14/2011", "5/7/2011", "5/8/2011", "5/9/2011"), class = "factor"), index = c(0.880538463, 0.256183209, 0.447239913, 0.942572251, 0.756441284, 0.098201146, 0.730044176, 0.177744529)), .Names = c("name", "date", "index"), class = "data.frame", row.names = c(NA, -8L)) to make seperate table based on unique value, I did following way siteA<-subset(dat, dat$name=="A") write.csv(siteA, "siteA.csv") Similarly for site B, siteB<-subset(dat, dat$name=="B") write.csv(siteB, "siteB.csv") and so on But I have more than 800 unique numbers in the column "name". Therefore, I have to repeat it more than 800 times, I am wondering there is a quickest way to split the data and save automatically in csv format. Thanks for your help. KG [[alternative HTML version deleted]]
Ista Zahn
2015-Jan-22 18:10 UTC
[R] How to split a data table into multiple tables based on column (unique value) and save them separately
The answer is right there in your question: see ?split Best, Ista On Jan 22, 2015 12:55 PM, "Kristi Glover" <kristi.glover at hotmail.com> wrote:> How to split a data table into multiple tables based on column (unique > value) and save them separately ? > > For example: > dat<-structure(list(name = structure(c(1L, 1L, 1L, 2L, 2L, 3L, 3L, > 4L), .Label = c("A", "B", "C", "D"), class = "factor"), date > structure(c(6L, > 7L, 8L, 1L, 2L, 3L, 4L, 5L), .Label = c("5/10/2011", "5/11/2011", > "5/12/2011", "5/13/2011", "5/14/2011", "5/7/2011", "5/8/2011", > "5/9/2011"), class = "factor"), index = c(0.880538463, 0.256183209, > 0.447239913, 0.942572251, 0.756441284, 0.098201146, 0.730044176, > 0.177744529)), .Names = c("name", "date", "index"), class = "data.frame", > row.names = c(NA, > -8L)) > to make seperate table based on unique value, I did following way > siteA<-subset(dat, dat$name=="A") > write.csv(siteA, "siteA.csv") > Similarly for site B, > siteB<-subset(dat, dat$name=="B") > write.csv(siteB, "siteB.csv") > and so on > > But I have more than 800 unique numbers in the column "name". Therefore, I > have to repeat it more than 800 times, > I am wondering there is a quickest way to split the data and save > automatically in csv format. > Thanks for your help. > KG > > > [[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]]
Bert Gunter
2015-Jan-22 18:16 UTC
[R] How to split a data table into multiple tables based on column (unique value) and save them separately
Kristi: You post here frequently. 1. Have you gone through any R tutorials (e.g. "An Intro to R", which ships with R) where you would find out about how to handle such basic operations? If not, why not?? 2. Why do you persist in posting in HTML, even though you have been asked not to? Not an issue here, particularly, but ... 2.5 But kudos on posting a small reproducible example that can be cut and pasted. 3. To answer your question, either the base R idiom lapply(split(...),FUN=..) or ?tapply handles this. ?by, ?aggregate, and ?ave are wrappers that might be more convenient, so you might start there. Hadley Wickham's widely used plyr package provides what many consider to be much more usable interfaces and flexibility for this sort of thing, so you may wish to learn and use this instead. Cheers, Bert Bert Gunter Genentech Nonclinical Biostatistics (650) 467-7374 "Data is not information. Information is not knowledge. And knowledge is certainly not wisdom." Clifford Stoll On Thu, Jan 22, 2015 at 9:52 AM, Kristi Glover <kristi.glover at hotmail.com> wrote:> How to split a data table into multiple tables based on column (unique value) and save them separately ? > > For example: > dat<-structure(list(name = structure(c(1L, 1L, 1L, 2L, 2L, 3L, 3L, > 4L), .Label = c("A", "B", "C", "D"), class = "factor"), date = structure(c(6L, > 7L, 8L, 1L, 2L, 3L, 4L, 5L), .Label = c("5/10/2011", "5/11/2011", > "5/12/2011", "5/13/2011", "5/14/2011", "5/7/2011", "5/8/2011", > "5/9/2011"), class = "factor"), index = c(0.880538463, 0.256183209, > 0.447239913, 0.942572251, 0.756441284, 0.098201146, 0.730044176, > 0.177744529)), .Names = c("name", "date", "index"), class = "data.frame", row.names = c(NA, > -8L)) > to make seperate table based on unique value, I did following way > siteA<-subset(dat, dat$name=="A") > write.csv(siteA, "siteA.csv") > Similarly for site B, > siteB<-subset(dat, dat$name=="B") > write.csv(siteB, "siteB.csv") > and so on > > But I have more than 800 unique numbers in the column "name". Therefore, I have to repeat it more than 800 times, > I am wondering there is a quickest way to split the data and save automatically in csv format. > Thanks for your help. > KG > > > [[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.