Hi! How about this:
--- snip -- for (i in 1:(length(split_str)-1)) { assign(paste("DF",i,sep=""),DF[ c((which(DF$name==split_str[i])+1):(which(DF$name==split_str[i+1])-1)), ]) } --- snip --- 'assign' creates for each subset a new data.frame DFn, where n ist a count (1,2,...). But note: if your DF has duplicates in 'name' (e.g. two rows with 'a' in 'DF$name'), my solution will use the first occurrence only (and this for both start and for end). HTH, Kimmo 2018-05-19 kello 16:37 +0530, Christofer Bogaso wrote: > Hi, > > I am struggling to split a data.frame as will below scheme : > > DF = data.frame(name = c('a', 'v', 'c'), val = 0); DF > > split_str = c('a', 'c') > > Now, for each element in split_str, R should find which row of DF > contains > that element, and return DF with all rows starting from next row of > the > corresponding element and ending with the preceding value of the next > element. > > So in my case, I should see 2 data.frames > > 1st data-frame with name = 'v' (i.e. 2nd row of DF) > > 2nd data.frame with number_of_rows as 0 (as there is no row left > after 'c') > > Similarly if split_str = c('v'') then, my 2 data.frames will be > > 1st data.frame with name = 'a' > 2nd data.frame with name = 'c' > > Any idea how to efficiently implement above scheme would be highly > appreciated. I tried with split() function, however, it is not giving > the > right answer. > > Thanks, > > ______________________________________________ > R-help@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-gui > de.html > and provide commented, minimal, self-contained, reproducible code. ______________________________________________ R-help@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.