Dear helpRs
Does anyone have an elegant way of doing the following:
For a given numeric vector, e.g. vec <- c(3,2,6,4,7)
Create a series of vectors where all but 1 of the values are replaced by
0's, e.g.
vec.a <- c(3,0,0,0,0)
vec.b <- c(0,2,0,0,0)
vec.c <- c(0,0,6,0,0)
vec.d <- c(0,0,0,4,0)
vec.e <- c(0,0,0,0,7)
I have looked at `replace', but can't think of a way of making it
produce
the 5 lines above without a for loop.
I would also like to assign the names automatically. I can create them
easily using paste, but how does one get R to treat the resulting
character strings as object names to which values can be assigned?
Thanks!
Karen
---
Karen Kotschy
Centre for Water in the Environment
University of the Witwatersrand, Johannesburg, South Africa
--
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
Hi Karen,
Try this:
vec <- c(3,2,6,4,7)
res <- diag(vec)
k <- length(vect)
for(i in 1:k) assign(paste('vec', letters[i], sep = '.'),
res[i,])
vec.a
# [1] 3 0 0 0 0
vec.b
# [1] 0 2 0 0 0
HTH,
Jorge
On Tue, Aug 17, 2010 at 6:57 AM, Karen Kotschy <> wrote:
> Dear helpRs
>
> Does anyone have an elegant way of doing the following:
>
> For a given numeric vector, e.g. vec <- c(3,2,6,4,7)
>
> Create a series of vectors where all but 1 of the values are replaced by
> 0's, e.g.
>
> vec.a <- c(3,0,0,0,0)
> vec.b <- c(0,2,0,0,0)
> vec.c <- c(0,0,6,0,0)
> vec.d <- c(0,0,0,4,0)
> vec.e <- c(0,0,0,0,7)
>
> I have looked at `replace', but can't think of a way of making it
produce
> the 5 lines above without a for loop.
>
> I would also like to assign the names automatically. I can create them
> easily using paste, but how does one get R to treat the resulting
> character strings as object names to which values can be assigned?
>
> Thanks!
> Karen
>
> ---
> Karen Kotschy
> Centre for Water in the Environment
> University of the Witwatersrand, Johannesburg, South Africa
>
>
> --
> This message has been scanned for viruses and
> dangerous content by MailScanner, and is
> believed to be clean.
>
> ______________________________________________
> R-help@r-project.org 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.
>
[[alternative HTML version deleted]]
Try this:
mapply(function(x, y)assign(x, y, envir = globalenv()),
sprintf('vec.%s',
letters[1:length(vec)]), split(diag(vec), 1:length(vec)))
On Tue, Aug 17, 2010 at 7:57 AM, Karen Kotschy <karen@sevenc.co.za> wrote:
> Dear helpRs
>
> Does anyone have an elegant way of doing the following:
>
> For a given numeric vector, e.g. vec <- c(3,2,6,4,7)
>
> Create a series of vectors where all but 1 of the values are replaced by
> 0's, e.g.
>
> vec.a <- c(3,0,0,0,0)
> vec.b <- c(0,2,0,0,0)
> vec.c <- c(0,0,6,0,0)
> vec.d <- c(0,0,0,4,0)
> vec.e <- c(0,0,0,0,7)
>
> I have looked at `replace', but can't think of a way of making it
produce
> the 5 lines above without a for loop.
>
> I would also like to assign the names automatically. I can create them
> easily using paste, but how does one get R to treat the resulting
> character strings as object names to which values can be assigned?
>
> Thanks!
> Karen
>
> ---
> Karen Kotschy
> Centre for Water in the Environment
> University of the Witwatersrand, Johannesburg, South Africa
>
>
> --
> This message has been scanned for viruses and
> dangerous content by MailScanner, and is
> believed to be clean.
>
> ______________________________________________
> R-help@r-project.org 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.
>
--
Henrique Dallazuanna
Curitiba-Paraná-Brasil
25° 25' 40" S 49° 16' 22" O
[[alternative HTML version deleted]]
Hi,
You can use diag() and matrix multiplication to create a matrix with the
requested rows, and assign() to store the rows as separate vectors:
> vec <- c(3,2,6,4,7)
> mat <- diag(vec)
> for (i in seq_along(vec)) assign(paste("vec", letters[i],
sep="."), mat[i,])
> vec.a
[1] 3 0 0 0 0
> vec.b
[1] 0 2 0 0 0
Best regards,
Charlie Roosen
Mango Solutions
-----Original Message-----
From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org]
On Behalf Of Karen Kotschy
Sent: 17 August 2010 12:58
To: r-help at r-project.org
Subject: [R] replacing values in a vector
Dear helpRs
Does anyone have an elegant way of doing the following:
For a given numeric vector, e.g. vec <- c(3,2,6,4,7)
Create a series of vectors where all but 1 of the values are replaced by
0's, e.g.
vec.a <- c(3,0,0,0,0)
vec.b <- c(0,2,0,0,0)
vec.c <- c(0,0,6,0,0)
vec.d <- c(0,0,0,4,0)
vec.e <- c(0,0,0,0,7)
I have looked at `replace', but can't think of a way of making it
produce
the 5 lines above without a for loop.
I would also like to assign the names automatically. I can create them
easily using paste, but how does one get R to treat the resulting
character strings as object names to which values can be assigned?
Thanks!
Karen
---
Karen Kotschy
Centre for Water in the Environment
University of the Witwatersrand, Johannesburg, South Africa
--
This message has been scanned for viruses and\ dangerous...{{dropped:20}}
try this:
vec <- c(3,2,6,4,7)
n <- length(vec)
for(i in seq_along(vec)){
r <- numeric(n)
r[i] <- vec[i]
assign(paste("vec.", letters[i], sep = ""), r)
}
I hope it helps.
Best,
Dimitris
On 8/17/2010 12:57 PM, Karen Kotschy wrote:> Dear helpRs
>
> Does anyone have an elegant way of doing the following:
>
> For a given numeric vector, e.g. vec<- c(3,2,6,4,7)
>
> Create a series of vectors where all but 1 of the values are replaced by
> 0's, e.g.
>
> vec.a<- c(3,0,0,0,0)
> vec.b<- c(0,2,0,0,0)
> vec.c<- c(0,0,6,0,0)
> vec.d<- c(0,0,0,4,0)
> vec.e<- c(0,0,0,0,7)
>
> I have looked at `replace', but can't think of a way of making it
produce
> the 5 lines above without a for loop.
>
> I would also like to assign the names automatically. I can create them
> easily using paste, but how does one get R to treat the resulting
> character strings as object names to which values can be assigned?
>
> Thanks!
> Karen
>
> ---
> Karen Kotschy
> Centre for Water in the Environment
> University of the Witwatersrand, Johannesburg, South Africa
>
>
--
Dimitris Rizopoulos
Assistant Professor
Department of Biostatistics
Erasmus University Medical Center
Address: PO Box 2040, 3000 CA Rotterdam, the Netherlands
Tel: +31/(0)10/7043478
Fax: +31/(0)10/7043014