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 N
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, uniqu
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)
t(app
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, ma
-
From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] On
Behalf Of markle...@verizon.net
Sent: Thursday, February 12, 2009 1:05 PM
To: Rolf Turner
Cc: r-help@r-project.org; Jason Shaw
Subject: Re: [R] Extending each element in a list, or rbind()-ing arrays of
different length
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 N
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
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[ t(apply(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
wrote:
> (typos corrected)
>
> Combining the various approaches on the list, here's a simple
> on
14 matches
Mail list logo