[R] Translate the elements of a dataframe

Chuck Cleland ccleland at optonline.net
Thu Apr 16 21:14:02 CEST 2009


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")})

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

-- 
Chuck Cleland, Ph.D.
NDRI, Inc. (www.ndri.org)
71 West 23rd Street, 8th floor
New York, NY 10010
tel: (212) 845-4495 (Tu, Th)
tel: (732) 512-0171 (M, W, F)
fax: (917) 438-0894




More information about the R-help mailing list