Re: [R] Extending each element in a list, or rbind()-ing arrays of different length without recycling

2009-02-13 Thread Patrick Burns
My question is: Why would you want a data structure that is clearly not expressive of the data involved? Let me guess. You are coming from statistical software where data are always rectangular. Patrick Burns patr...@burns-stat.com +44 (0)20 8525 0696 http://www.burns-stat.com (home of The R

Re: [R] Extending each element in a list, or rbind()-ing arrays of different length without recycling

2009-02-13 Thread Stavros Macrakis
Combining the various approaches on the list, here's a simple one-liner that puts the NAs at the end: t(apply(mat,1,function(r) { dr-duplicated(r); c( r[!dr], rep(NA,sum(dr)) ) )) If you don't care where the NAs are, the following is a tad shorter and perhaps clearer: mat[

Re: [R] Extending each element in a list, or rbind()-ing arrays of different length without recycling

2009-02-13 Thread Stavros Macrakis
(typos corrected) Combining the various approaches on the list, here's a simple one-liner that puts the NAs at the end: t(apply(mat,1,function(r) { dr-duplicated(r); c( r[!dr], rep(NA,sum(dr)) ) })) If you don't care where the NAs are, the following is a tad shorter and perhaps clearer:

Re: [R] Extending each element in a list, or rbind()-ing arrays of different length without recycling

2009-02-13 Thread Gabor Grothendieck
That is very nice. Maybe just one slight improvement so to express it in a non-destructive form: replace(mat, t(apply(mat,1,duplicated)), NA) On Fri, Feb 13, 2009 at 12:58 PM, Stavros Macrakis macra...@alum.mit.edu wrote: (typos corrected) Combining the various approaches on the list,

[R] Extending each element in a list, or rbind()-ing arrays of different length without recycling

2009-02-12 Thread Jason Shaw
Hi, I'm trying to take a matrix such as [,1] [,2] [,3] [,4] [,5] [1,]27279 [2,] 10 10686 [3,]19720 and generate a new matrix which contains only the unique values in each row: [,1] [,2] [,3] [,4] [,5] [1,]279 NA

Re: [R] Extending each element in a list, or rbind()-ing arrays of different length without recycling

2009-02-12 Thread Jorge Ivan Velez
Dear Jason, Try this: x-matrix(scan(),byrow=TRUE,ncol=5) 27279 10 10686 19720 res-apply(x,1,unique) # Unique values maxlength-max(do.call(c,lapply(res,length))) # Maximum length of unique values # Your matrix do.call(rbind,lapply(res,function(x){

Re: [R] Extending each element in a list, or rbind()-ing arrays of different length without recycling

2009-02-12 Thread Gabor Grothendieck
Try this. After the apply from your post we use lapply to make each series into a zoo series so that we can later use zoo's multiway merge. Finally we actually merge them and in the next statement just makes nice column names: library(zoo) all3 - do.call(merge, lapply(apply(peaks, 1,

Re: [R] Extending each element in a list, or rbind()-ing arrays of different length without recycling

2009-02-12 Thread markleeds
Hi Jason: below seems to work. you have to take the transpose because the apply returns the rows transposed. i'm also not sure how to make the NAs be the last ones but maybe someone can show us how to do that. mat - matrix(c(2,7,2,7,9,10,10,6,8,6,1,9,7,2,0),byrow=TRUE,nrow=3) print(mat)

Re: [R] Extending each element in a list, or rbind()-ing arrays of different length without recycling

2009-02-12 Thread Rolf Turner
On 13/02/2009, at 9:06 AM, markle...@verizon.net wrote: Hi Jason: below seems to work. you have to take the transpose because the apply returns the rows transposed. i'm also not sure how to make the NAs be the last ones but maybe someone can show us how to do that. Pretty easy: na.at.end -

Re: [R] Extending each element in a list, or rbind()-ing arrays of different length without recycling

2009-02-12 Thread markleeds
Thanks Rolf. very nice but pretty easy is ALWAYS a relative statement. On Thu, Feb 12, 2009 at 3:59 PM, Rolf Turner wrote: On 13/02/2009, at 9:06 AM, markle...@verizon.net wrote: Hi Jason: below seems to work. you have to take the transpose because the apply returns the rows transposed.

Re: [R] Extending each element in a list, or rbind()-ing arrays of different length without recycling

2009-02-12 Thread Wacek Kusnierczyk
markle...@verizon.net wrote: Thanks Rolf. very nice but pretty easy is ALWAYS a relative statement. right. it's even easier: na.last = function(x) { na = is.na(x) c(x[!na], x[na]) } On Thu, Feb 12, 2009 at 3:59 PM, Rolf Turner wrote: On 13/02/2009, at 9:06 AM,

Re: [R] Extending each element in a list, or rbind()-ing arrays of different length without recycling

2009-02-12 Thread Bert Gunter
At the risk of beating the decaying skeletal remains of the stone dead horse, a one-liner: t(apply(mat,1,function(x)c(unique(x),rep(NA,sum(duplicated(x)) (probably more efficient as a 2-liner that calls duplicated/unique only once, though) -- Bert Gunter, Genentech -Original

Re: [R] Extending each element in a list, or rbind()-ing arrays of different length without recycling

2009-02-12 Thread Gabor Grothendieck
Here is one other solution. Its nearly the same as the last but uses ts instead of zoo: all3 - do.call(cbind, lapply(apply(peaks, 1, unique), ts)) colnames(all3) - make.names(1:ncol(all3)) all3 Time Series: Start = 1 End = 5 Frequency = 1 X1 X2 X3 1 2 10 1 2 7 6 9 3 9 8 7 4 NA NA 2

Re: [R] Extending each element in a list, or rbind()-ing arrays of different length without recycling

2009-02-12 Thread Berwin A Turlach
G'day all, On Thu, 12 Feb 2009 14:06:21 -0600 (CST) markle...@verizon.net wrote: Hi Jason: below seems to work. you have to take the transpose because the apply returns the rows transposed. i'm also not sure how to make the NAs be the last ones but maybe someone can show us how to do