Hi,
I'm having trouble applying the matrix function. I'd like to be able to
create a matrix of vectors filled in by rows, which are not all the same
length, and so I need it to fill in NAs where applicable.
It's easiest to explain with a simple example:
Suppose vec = c(3,4,5). How can I form a matrix of the vectors 1:vec[j]
for j=1:3?
i.e. 1 2 3 NA NA
1 2 3 4 NA
1 2 3 4 5
I've tried matrix(c(1:vec[j]),nrow=max(j),ncol=max(vec)) but it will
only give me a matrix with repeated values for j=1, like 1 2 3 1
2
3 1 2 3 1
2 3 1 2 3
Also using the list function hasn't got me anywhere either..
Any help/ideas would be greatly appreciated!
Many thanks,
Sara-Jane Dunn
--
This message (and any attachments) is for the recipient only...{{dropped}}
Here are two solutions. seq(length = ...) instead of
just seq(...) is so that v can possibly contain zeros.
# data
v <- 3:5
# solution 1 - rbind/lapply
f <- function(n) {
s = seq(length = n)
replace(rep(NA, max(v)), s, s)
}
do.call(rbind, lapply(v, f))
# solution 2 - loop
mat <- matrix(NA, length(v), max(v))
for(i in seq(v)) {
s <- seq(length = v[i])
mat[i, s] <- s
}
On 8/22/06, Sara-Jane Dunn <SND at bas.ac.uk>
wrote:> Hi,
>
> I'm having trouble applying the matrix function. I'd like to be
able to
> create a matrix of vectors filled in by rows, which are not all the same
> length, and so I need it to fill in NAs where applicable.
>
> It's easiest to explain with a simple example:
>
> Suppose vec = c(3,4,5). How can I form a matrix of the vectors 1:vec[j]
> for j=1:3?
> i.e. 1 2 3 NA NA
> 1 2 3 4 NA
> 1 2 3 4 5
> I've tried matrix(c(1:vec[j]),nrow=max(j),ncol=max(vec)) but it will
> only give me a matrix with repeated values for j=1, like 1 2 3 1
> 2
> 3 1 2 3 1
> 2 3 1 2 3
>
> Also using the list function hasn't got me anywhere either..
>
> Any help/ideas would be greatly appreciated!
>
> Many thanks,
> Sara-Jane Dunn
>
> --
> This message (and any attachments) is for the recipient only...{{dropped}}
>
> ______________________________________________
> R-help at stat.math.ethz.ch 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.
>
Hi
> f <- function(a,n){(1:a)[1:n]}
> t(sapply(c(2,3,4,4,4,5,6),f,n=5))
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 NA NA NA
[2,] 1 2 3 NA NA
[3,] 1 2 3 4 NA
[4,] 1 2 3 4 NA
[5,] 1 2 3 4 NA
[6,] 1 2 3 4 5
[7,] 1 2 3 4 5
>
>
HTH
rksh
On 22 Aug 2006, at 12:29, Sara-Jane Dunn wrote:
> Hi,
>
> I'm having trouble applying the matrix function. I'd like to be
> able to
> create a matrix of vectors filled in by rows, which are not all the
> same
> length, and so I need it to fill in NAs where applicable.
>
> It's easiest to explain with a simple example:
>
> Suppose vec = c(3,4,5). How can I form a matrix of the vectors 1:vec
> [j]
> for j=1:3?
> i.e. 1 2 3 NA NA
> 1 2 3 4 NA
> 1 2 3 4 5
> I've tried matrix(c(1:vec[j]),nrow=max(j),ncol=max(vec)) but it will
> only give me a matrix with repeated values for j=1, like 1 2 3 1
> 2
> 3 1 2 3 1
> 2 3 1 2 3
>
> Also using the list function hasn't got me anywhere either..
>
> Any help/ideas would be greatly appreciated!
>
> Many thanks,
> Sara-Jane Dunn
>
> --
> This message (and any attachments) is for the recipient on...{{dropped}}