On 29-03-2013, at 20:01, Hermann Norpois <hnorp...@gmail.com> wrote:

> Hello,
> 
> I would like to transform a character vector into a "binary" vector
> ("keine" and " " become 0 and the rest 1).
> 
>> dput (scm)
> c("keine", " ", "keine", "Erstgradverw.", "Mutter", "Erstgradverw.",
> "Erstgradverw.", "keine", " ", "Vater", "Erstgradverw.", "keine",
> "keine", "keine", "keine", " ", "Erstgradverw.", "keine", "keine",
> "Erstgradverw.")
> 
> I tried:
> 
> scoref <- sapply (scm, function (x) ifelse (x == "keine"|x==" ", 0, 1))
> 
> or
> 
> scoref <- sapply (scm, function (x) ifelse (x == "keine"|x==" ", x <- 0, x
> <- 1))
> 
> And this is the output:
> 
>> scoref
>        keine                       keine Erstgradverw.        Mutter
>            0             0             0             1             1
> Erstgradverw. Erstgradverw.         keine                       Vater
>            1             1             0             0             1
> Erstgradverw.         keine         keine         keine         keine
>            1             0             0             0             0
>              Erstgradverw.         keine         keine Erstgradverw.
>            0             1             0             0             1
> 
> How do I get rid off the text. Is there an alternative method?
> 

First of all read the help page for sapply (and other apply's) in particular 
the part describing argument USE.NAMES.

You don't need to use ifelse: a simple if/else will do. x is a scalar in your 
function and ifelse is overkill. So you also don't need to use |.

So

scoref <- sapply (scm, function (x) if (x == "keine" || x==" ")  0 else 1, 
USE.NAMES=FALSE)

or

scoref <- sapply (scm, function (x) 1-(x == "keine"||x==" "), USE.NAMES=FALSE)

Berend

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

Reply via email to