On Dec 10, 2012, at 1:03 PM, john-usace wrote:

Hi,

This question should be simple to answer. I am a new R user.

I have a data.frame called appended. I would like to break it into 7 smaller datasets based on the value of a categorical variable dp (which has values 1:7). I would like to name the smaller datasets set1, set2, set3,....,set7. I don't know how to refer to the variable in the for loop, when naming the output datasets. In STATA (which I am much more familiar with) each i in the foreach loop would be refered to as `i'. This is the code I've included
below. I've also tried set[[i]] and set[i] neither works.

for (i in 1:7) {
        set`i' = appended[which(appended$dp==i & appended$sampled==0), ]

I am not aware of any set function, nor can one append back-ticked characters to unquoted characters and expect anything useful to happen.


write.table(set`i', file = "output\\set`i'.csv", sep = ",", row.name=F)
        }

I'm assuming I just need to replace `' with something else but I can figure
out what that something else is.


In R the easy way would be to create a list that holds all of the split dataframes:

newlist <- split( appended, catvar)
names(newlist) <- paste0("set", 1:7)

If you goal were just to have these in your workspace, you are done. If you goal is to write them out to a file then you can either save it as one object to be later pulled back into a session with the load(.) command using this:

save(newlist, "newlist.Rdata")

Or you can write each individually with

lapply(names(newlist) , function(dfrm) {
                      write.table(newlist[[dfrm]],
file=paste0( dfrm, ".csv", sep=",", rowname=FALSE) }

(Untested. You should read the help pages of the various functions mentioned.)
--

David Winsemius, MD
Alameda, CA, USA

______________________________________________
R-help@r-project.org mailing list
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.

Reply via email to