[R] how to coerce part of each column of a matrix to a vector and merge them

Michael Bedward michael.bedward at gmail.com
Tue Jan 11 09:09:53 CET 2011


Hello,

The answer to this one drops out of the answer to your previous question...

m <- matrix(1:16, nrow=4)
end <- c(2,3,1,3)
ii <- cbind(sequence(end), rep(1:length(end), end))
x <- m[ ii ]

Hope this helps,
Michael


2011/1/11 zhaoxing731 <zhaoxing731 at yahoo.com.cn>:
> Hello
>
> Suppose I have a matrix mat=(1:16,2)
>     [,1] [,2] [,3] [,4]
> [1,]    1    5    9   13
> [2,]    2    6   10   14
> [3,]    3    7   11   15
> [4,]    4    8   12   16
>
> there is a vector end=c(2,3,1,3)
>
> #coerce the 1st 2 numbers of the 1st column to a vector  [1]  1  2
> #coerce the 1st 3 numbers of the 2nd column and append it to the previous vector  [1]  1  2  5  6  7
> #coerce the 1st number of the 3rd column and append it to the previous vector  [1]  1  2  5  6  7  9
> #coerce the 1st 3 numbers of the 4th column and append it to the previous vector  [1]  1  2  5  6  7  9 13 14 15
> #they are specified by vector end
> a for loop
> mat<-matrix(1:16,4)
> end<-c(2,3,1,3)
> vec<-numeric()
> for (i in 1:4)
>        {vec<-c(vec,mat[1:end[i],i])
>        }
> #the result
>  > vec
> [1]  1  2  5  6  7  9 13 14 15
>
>  but when I want to do it to a large dataset, it's inefficiency becomes a problem, so need vectorization
>
>  Thank you in advance
>  Yours sincerely
>
> ZhaoXing
> Department of Health Statistics
> West China School of Public Health
> Sichuan University
> No.17 Section 3, South Renmin Road
> Chengdu, Sichuan 610041
> P.R.China
>
> __________________________________________________
> 赶快注册雅虎超大容量免费邮箱?
>
> ______________________________________________
> 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.
>



More information about the R-help mailing list