Hello, I wish to perform a substitution of certain numerical values in a data matrix with the corresponding column name. For instance, if I have a data matrix V1 V2 V3 2 0 1 0 1 2 1 5 0 5 0 0 I want to substitute the `1' and the `2' for the corresponding column name, and make everything else `NA' like this V1 V2 V3 V1 NA V3 NA V2 V3 V1 NA NA NA NA NA I have done this using an explicit `for' loop, but it takes a really long time to finish. Is there any way I can do this using `apply' or some form of implicit looping? Thank you for your help, SO -- View this message in context: http://www.nabble.com/Substituting-numerical-values-using-%60apply%27-tp24398687p24398687.html Sent from the R help mailing list archive at Nabble.com.
Dear Olivella,
Assuming that x is your data, here is one possible way to do what you want:
t(
apply(x, 1, function(x){
index <- x %in% c(1,2)
x[index] <- cls[index]
x[!index] <- NA
x
}
)
)
How big is the data you are dealing with?
HTH,
Jorge
On Wed, Jul 8, 2009 at 4:25 PM, Olivella <olivella@wustl.edu> wrote:
>
> Hello,
>
> I wish to perform a substitution of certain numerical values in a data
> matrix with the corresponding column name. For instance, if I have a data
> matrix
> V1 V2 V3
> 2 0 1
> 0 1 2
> 1 5 0
> 5 0 0
>
> I want to substitute the `1' and the `2' for the corresponding
column name,
> and make everything else `NA' like this
> V1 V2 V3
> V1 NA V3
> NA V2 V3
> V1 NA NA
> NA NA NA
>
> I have done this using an explicit `for' loop, but it takes a really
long
> time to finish. Is there any way I can do this using `apply' or some
form
> of
> implicit looping?
>
> Thank you for your help,
>
> SO
> --
> View this message in context:
>
http://www.nabble.com/Substituting-numerical-values-using-%60apply%27-tp24398687p24398687.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> 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]]
Henrique Dallazuanna
2009-Jul-09 02:49 UTC
[R] Substituting numerical values using `apply'
Try this: sapply(names(DF), function(n)ifelse(DF[,n] %in% c(1, 2), n, NA)) Where DF is your data.frame On Wed, Jul 8, 2009 at 5:25 PM, Olivella <olivella@wustl.edu> wrote:> > Hello, > > I wish to perform a substitution of certain numerical values in a data > matrix with the corresponding column name. For instance, if I have a data > matrix > V1 V2 V3 > 2 0 1 > 0 1 2 > 1 5 0 > 5 0 0 > > I want to substitute the `1' and the `2' for the corresponding column name, > and make everything else `NA' like this > V1 V2 V3 > V1 NA V3 > NA V2 V3 > V1 NA NA > NA NA NA > > I have done this using an explicit `for' loop, but it takes a really long > time to finish. Is there any way I can do this using `apply' or some form > of > implicit looping? > > Thank you for your help, > > SO > -- > View this message in context: > http://www.nabble.com/Substituting-numerical-values-using-%60apply%27-tp24398687p24398687.html > Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > 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]]
Let M be your matrix. Do the following: B <- t(matrix(colnames(a),nrow=ncol(M),ncol=nrow(M))) B[M==0] <- NA --- On Thu, 9/7/09, Olivella <olivella at wustl.edu> wrote:> From: Olivella <olivella at wustl.edu> > Subject: [R] Substituting numerical values using `apply' > To: r-help at r-project.org > Received: Thursday, 9 July, 2009, 6:25 AM > > Hello, > > I wish to perform a substitution of certain numerical > values in a data > matrix with the corresponding column name. For instance, if > I have a data > matrix > V1? V2? V3 > 2? ? 0? ? 1 > 0? ? 1? ? 2 > 1? ? 5? ? 0 > 5? ? 0? ? 0 > > I want to substitute the `1' and the `2' for the > corresponding column name, > and make everything else `NA' like this > V1? ? V2? ? V3 > V1? ? NA? ? V3 > NA? ? V2? ? V3 > V1? ? NA? ? NA > NA? ? NA? ? NA > > I have done this using an explicit `for' loop, but it takes > a really long > time to finish. Is there any way I can do this using > `apply' or some form of > implicit looping? > > Thank you for your help, > > SO > -- > View this message in context: http://www.nabble.com/Substituting-numerical-values-using-%60apply%27-tp24398687p24398687.html > Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > R-help at 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. >