[R] How to delete rows

Barry Rowlingson B.Rowlingson at lancaster.ac.uk
Wed Jul 27 19:05:30 CEST 2005


Michael Graber wrote:
> Dear R-users,
> 
> I am very new to R, so maybe my question is very easy to answer.
> I have the following table:
> TAB1<-data.frame(Name,Number), "Name" and "Number" are all character 
> strings,
> it looks like this:
> 
> Name  Number
> 
> ab      2
> 

  [etc]

> gh     15
> 
> gh     15
> 

>  for (i in 1:ZeileMax )  {if ( TAB1[[1]] [i] != "NA" ) 
> {cat(TAB1[[1]][i],file = "Name.txt",fill= TRUE,append = TRUE ,sep = 
> "");cat(TAB1[[2]][i], file="Number.txt", fill=TRUE,append=TRUE, sep="")}}
> Name<-readLines("Name.txt")
> Number<-readLines("Number.txt")
> TAB<-data.frame(Name,Number)

  I'm not going to bother working out why that fails!

  The following assumes you want to keep one of any row that has a 
duplicated Name, in this case the first instance. I think your mail was 
a bit ambiguous as to whether you wanted to delete all rows with a 
duplicate Name...

  You can do it in two lines. First select the rows that dont have
Name=="NA", and then select the rows that dont have duplicated Name:

  > TAB <- TAB1[TAB1$Name!="NA",]
  > TAB <- TAB[!duplicated(TAB$Name),]

  > TAB
    Name Number
1    ab      2
6    cd      3
7    ef      1
10   gh     15

  Or you can do it in one line:

  > TAB=TAB1[!duplicated(TAB1$Name) & TAB1$Name!="NA",]
  > TAB

    Name Number
1    ab      2
6    cd      3
7    ef      1
10   gh     15

  Dont think of it as deleting rows, you are selecting the rows you want
and creating a new data frame.

  Any simple intro to R (see www.r-project.org for plenty) will have
examples on selecting rows and columns.

Baz




More information about the R-help mailing list