utkarshsinghal <utkarsh.sing...@global-analytics.com> napsal dne 16.04.2009 17:20:10:
> Hi Pikal, > > Thanks for your comments and apologies for not providing a clear example. But > you have completely ignored the small example I mentioned: Well, this is not exactly an example. So let us clarify things a bit. You do not explain how to handle your vector at all. One option split(1:20, factor(1:3)) splits your vector to 3 groups. It recycles 1:3 so every third observation is put into one vector. This function randomly samples a vector and gives you list with 3 almost equal groups and can be easily expanded to arbitrary number of groups. function(x) { x1<-sample(x, ceiling(length(x)/3)) x.<-x[-x1] x2<-sample(x., ceiling(length(x.)/2)) x3<-x[-c(x2,x1)] list(x1,x2,x3) } Here are two functions which compute how many members are in each group and how many are left. > 20%%3 [1] 2 > 20%/%3 [1] 6 split(x, rep(letters[1:3], each=length(x)%/%3)) and this splits your vector to 3 portions and put last 2 values to the first vector. I think I gave you some insights how to handle such problem. > > I want to split rnorm(20) into three equal groups. > Note that here number of observations is not a multiple of number of groups. > For that I want an option where I can specify how to treat these extra which extra observations, first 2, last 2, arbitrary 2? > observations, i.e., to put these observations into the 1st group or the last > group or one in each group starting from 1st or starting from last Only **you** know how exactly **you** want to handle it so **you** need to elaborate a function **yourself**. If the function shall split arbitrary length vector to arbitrary number of groups and put extra values to arbitrary groups it would not be a simple case and it would need a little bit of programming work. > Also I dont want to calculate the number of observations going in each group beforehand. You do not need to calculate it yourself. R will do it for you if you tell it. Regards Petr > > Regards > Utkarsh > > > Petr PIKAL wrote: > Hi > > r-help-boun...@r-project.org napsal dne 16.04.2009 15:23:15: > > > Hi R, > > I have explored R archives a lot but couldn't find an efficient way of > doing the following: > > I want to split a vector into sets of equal sizes. Is there any inbuilt > function of doing so with the option of specifying how to treat the > remaining observations. For example: suppose I want to split 20 > observations in 3 groups, then I also want the option to put the extra > two observations into the 1st group or the last group or one in each > group starting from 1st or starting from last. > > I have already tried the "cut" & the "quantcut" function but of no use. > Any help will be appreciated. Note that I am looking for an R function > rather than lines of code. > > > Did you try split? > e.g. > split(rnorm(12), rep(1:3,4)) > gives list with 3 vectors. Then you can use lapply, sapply or other list > functions to make some computation. > > Or I could be completely wrong what you really want as you did not provide > any example. > > Regards > Petr > > > > Regards > Utkarsh > > ______________________________________________ > 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. > > > > > ______________________________________________ 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.