I am trying to delete a section of rows from a data frame (based on no condition). Lets say my data frame has 200 rows and I want to delete rows 1 through 25. How would I do this? I know x[ -1, ] deletes the first row (or any desired row). I tried using different variations of this, like x[ -c(1:25), ] but that didn't work. I also tried writting a few functions, for example: deleteRows <- function( data, s, e, ) { for( i in s:e ) data[ -i, ] } deleteRows( ds, 1, 25 ) But that didn't work either, it only deleted row 25 (i'm new to writing functions). Any thoughts on how to solve my problem would be appreciated. -- View this message in context: http://www.nabble.com/Delete-Block-of-Rows-tp17849775p17849775.html Sent from the R help mailing list archive at Nabble.com.
Hi there, I donĀ“t know if you are trying to solve the delete job or to test how functions work. If you really want to delete lines from a data.frame, try something like this. rowcount<-1:100 x<-runif(100) y<-runif(100) df<-data.frame(cbind(rowcount,x,y)) df.subset<-subset(df, !(rownames(df) %in% 1:25)) # ! (a condition) is the negation of the condition # so the output will be those lines that are not on interval 1:25 By the way, it is not a good idea to use "data" as a input argument on a function because "data" is a pre-defined function. Kind regards, miltinho On 6/15/08, nmarti <nate318i@yahoo.com> wrote:> > > I am trying to delete a section of rows from a data frame (based on no > condition). Lets say my data frame has 200 rows and I want to delete rows > 1 > through 25. How would I do this? > > I know x[ -1, ] deletes the first row (or any desired row). I tried using > different variations of this, like x[ -c(1:25), ] but that didn't work. I > also tried writting a few functions, for example: > > deleteRows <- function( data, s, e, ) { > for( i in s:e ) > data[ -i, ] > } > deleteRows( ds, 1, 25 ) > > But that didn't work either, it only deleted row 25 (i'm new to writing > functions). > Any thoughts on how to solve my problem would be appreciated. > -- > View this message in context: > http://www.nabble.com/Delete-Block-of-Rows-tp17849775p17849775.html > Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > 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. >[[alternative HTML version deleted]]
nmarti wrote:> I am trying to delete a section of rows from a data frame (based on no > condition). Lets say my data frame has 200 rows and I want to delete rows 1 > through 25. How would I do this? > > I know x[ -1, ] deletes the first row (or any desired row). I tried using > different variations of this, like x[ -c(1:25), ] but that didn't work.what do you mean by 'didnt work'? when you use negative indices, rows (or columns) from the input are skipped in the output. but to have a side effect of actually changing the data frame, you need an assignment. to modify your data frame, you need: x = x[-c(<your spec>),] while x[-c(<your spec>),] will (should) return a df with rows skipped, but x won't be changed.> I > also tried writting a few functions, for example: > > deleteRows <- function( data, s, e, ) { > for( i in s:e ) > data[ -i, ] > } > deleteRows( ds, 1, 25 ) > > But that didn't work either, it only deleted row 25it didn't work, it didn't even delete row 25 from ds -- it *returned* a df with all rows of ds except row 25 (in a bad style, i'd say).> (i'm new to writing > functions). >consider reading the docs. note that an implementation like deleteRows = function(df, s, e) (df = df[-(s:e),,drop=FALSE]) won't work, because in r data frames are passed as arguments to functions by value (you are welcome to argue that this is insane). vQ
I believe that x <- x[-(1:25),] should work. --- On Sun, 15/6/08, nmarti <nate318i at yahoo.com> wrote:> From: nmarti <nate318i at yahoo.com> > Subject: [R] Delete Block of Rows > To: r-help at r-project.org > Received: Sunday, 15 June, 2008, 11:02 PM > I am trying to delete a section of rows from a data frame > (based on no > condition). Lets say my data frame has 200 rows and I want > to delete rows 1 > through 25. How would I do this? > > I know x[ -1, ] deletes the first row (or any desired row). > I tried using > different variations of this, like x[ -c(1:25), ] but that > didn't work. I > also tried writting a few functions, for example: > > deleteRows <- function( data, s, e, ) { > for( i in s:e ) > data[ -i, ] > } > deleteRows( ds, 1, 25 ) > > But that didn't work either, it only deleted row 25 > (i'm new to writing > functions). > Any thoughts on how to solve my problem would be > appreciated. > -- > View this message in context: > http://www.nabble.com/Delete-Block-of-Rows-tp17849775p17849775.html > Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > R-help at 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.