[R] Translate the elements of a dataframe

Juergen Rose rose at rz.uni-potsdam.de
Thu Apr 16 21:32:05 CEST 2009


Am Donnerstag, den 16.04.2009, 15:14 -0400 schrieb Chuck Cleland:
> On 4/16/2009 2:58 PM, Juergen Rose wrote:
> > The second beginner question. I want to create a new dataframe, where
> > each element of the original dataframe is translated to 1 if it was "+",
> > to 0 if it was "-" to -1 otherwise. I could do with:
> > 
> > Lines <- "a    b    c    d
> >     +    -    +   +
> >     +    +    +   -   
> >     +    1    -   '+ '
> >     -    +    +   +
> >     +    N    -   +"
> > 
> > 
> > DF <- read.table(textConnection(Lines), header = TRUE)
> > cnames <- colnames(DF)
> > nrow <-length(rownames(DF))
> > 
> > nc <- length(cnames)
> > NDF <- data.frame(matrix(c(rep(0,nc*nrow)),ncol=nc))
> > 
> > for (i in 1:length(cnames)) {
> >   NDF[,i] <- sapply(DF[,i],function(x) if (x=="+") {1} else {if (x=="-")
> > {0} else {-1}} )
> > }
> > colnames(NDF) <- cnames
> > 
> > But this is shure one loop too much. Please give me the R way solution.
> 
> library(car)
> 
> DF[] <- lapply(DF, function(x){recode(x, "'+'=1; '-'=0; else=-1")})

Thanks Chuck, I like this solution.

> > ______________________________________________
> > 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. 
>




More information about the R-help mailing list