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
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[
(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:
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,
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
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){
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,
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)
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 -
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.
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,
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
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
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
14 matches
Mail list logo