Skip to content

Translate the elements of a dataframe

4 messages · Juergen Rose, Chuck Cleland, Gabor Grothendieck

#
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.
#
On 4/16/2009 2:58 PM, Juergen Rose wrote:
library(car)

DF[] <- lapply(DF, function(x){recode(x, "'+'=1; '-'=0; else=-1")})

  
    
#
Am Donnerstag, den 16.04.2009, 15:14 -0400 schrieb Chuck Cleland:
Thanks Chuck, I like this solution.
#
Try this:

2 * (DF == "+") - (DF != "-")
On Thu, Apr 16, 2009 at 2:58 PM, Juergen Rose <rose at rz.uni-potsdam.de> wrote: