[R] How to get row numbers of a subset of rows

jim holtman jholtman at gmail.com
Wed Nov 14 17:39:06 CET 2007


Here is a way of doing it using 'rle':

> x <- read.table(textConnection("     SNP                Chromosome  PhysicalPosition
+ 1 SNP_A-1909444          1           7924293
+ 2 SNP_A-2237149          1           8173763
+ 3 SNP_A-4303947          1           8191853
+ 4 SNP_A-2236359          1           8323433
+ 5 SNP_A-2205441          1           8393263
+ 6 SNP_A-1909445          1           7924293
+ 7 SNP_A-2237146          2           8173763
+ 8 SNP_A-4303946          2           8191853
+ 9 SNP_A-2236357          2           8323433
+ 10 SNP_A-2205442         2           8393263"), header=TRUE)
> # use rle to get the 'runs'
> y <- rle(x$Chromosome)
> # create dataframe with start/ends and values
> start <- head(cumsum(c(1, y$lengths)), -1)
> index <- data.frame(values=y$values, start=start, end=start + y$lengths - 1)
>
> index
  values start end
1      1     1   6
2      2     7  10
>


On Nov 14, 2007 10:56 AM, affy snp <affysnp at gmail.com> wrote:
> Hello list,
>
> I read in a txt file using
>
> <B<-read.table(file="data.snp",header=TRUE,row.names=NULL)
>
> by specifying the row.names=NULL so that the rows are numbered.
> Below is an example after how the table looks like using
> <B[1:10,1:3]
>
>
>      SNP                Chromosome  PhysicalPosition
> 1 SNP_A-1909444          1           7924293
> 2 SNP_A-2237149          1           8173763
> 3 SNP_A-4303947          1           8191853
> 4 SNP_A-2236359          1           8323433
> 5 SNP_A-2205441          1           8393263
> 6 SNP_A-1909445          1           7924293
> 7 SNP_A-2237146          2           8173763
> 8 SNP_A-4303946          2           8191853
> 9 SNP_A-2236357          2           8323433
> 10 SNP_A-2205442         2           8393263
>
> I am wondering if there is a way to return the start and end row numbers
> for a subset of rows.
>
> For example, If I specify B[,2]=1, I would like to get
> start=1 and end=6
>
> if B[,2]=2, then start=7 and end=10
>
> Is there any way in R to quickly do this?
>
> Thanks a bunch!
>
> Allen
>
> ______________________________________________
> 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.
>



-- 
Jim Holtman
Cincinnati, OH
+1 513 646 9390

What is the problem you are trying to solve?



More information about the R-help mailing list