[R] Delete Block of Rows

Wacek Kusnierczyk Waclaw.Marcin.Kusnierczyk at idi.ntnu.no
Sun Jun 15 17:36:53 CEST 2008


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 25 
it 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



More information about the R-help mailing list