Skip to content
Back to formatted view

Raw Message

Message-ID: <971536df0902232131u60147050k24e17b014752228d@mail.gmail.com>
Date: 2009-02-24T05:31:43Z
From: Gabor Grothendieck
Subject: array manipulation simple questions
In-Reply-To: <547227.49656.qm@web25902.mail.ukl.yahoo.com>

2009/2/23 ???????? ??????? <bleonidas25 at yahoo.gr>:
>
> Hi there,
>
> I am pretty new to R. Actually I started using it yesterday. I have?two questions:
>
> 1.?? Suppose I have a<-c(1:10)? (or a<-array(c(1:10),dim=c(1,10)))
>
> and I want to end up with vector b=[0 0 0 0 0 1 1 1 1 1]. i.e. I want to substitute alla elements that are <5 with 0 and >5 with 1.
>
> I did this by using a for loop. Is there another function to use so as to avoid the "for"?


(a>5)+0

# or

out <- as.numeric(a > 5)
if (is.matrix(a)) out <- matrix(a, 1)
out

>
>
> 2.? Suppose I have a<-c(1,1,2,2,3,3)? (or array again)
>
> And I want to place a "4,5" before every "2" and end up with a new "bigger" vector "b":
>
> b=[1 1 4 5 2 4 5 2 3 3]

# return c(4, 5, 2) or x
f <- function(x) if (x==2) c(4:5, x) else x

# apply f to each element and
# if a is a matrix make output a matrix too

out <- unlist(sapply(a, f))
if (is.matrix(a)) out <- matrix(out, nrow(a))
out

>
> Also I want to find where the 2's in?array "a"?(if it was an array) are located i.e. positions 3,4.

which(a == 2)