saschaview wrote on 12/01/2011 12:30:18 PM:

> Hello
> 
> I have a data frame, x, holding 5 persons answering the question which 
> cars they have used:
> 
> # the data frame
> x <- as.data.frame(
>    matrix(
>      c('BMW', '', '',
>        'Mercedes', 'VW', '',
>        'Skoda', 'VW', 'BMW',
>        '', '', '',
>        'VW', 'Skoda', ''
>      ),
>      ncol=3,
>      dimnames=list(
>        NULL,
>        paste( 'v', 1:3, sep='' )
>      )
>    )
> )
> 
> How do I transform this data frame to a data frame stating whether they 
> have used the presented car:
> 
>     BMW  Mercedes  VW  Skoda
> 1  T    F         F   F
> 2  F    T         T   F
> 3  T    F         T   T
> 4  F    F         F   F
> 5  F    F         T   T
> 
> My idea was to first find all levels by:
> 
> v <- unique(unlist(lapply(x, levels)))
> 
> But then I am stuck.
> 
> Thanks for help, *S*
> 
> -- 
> Sascha Vieweg, saschaview@gmail.com


Try this:

uniq.cars <- sort(unique(unlist(x)))
y <- t(apply(x, 1, function(xrow) match(uniq.cars, unique(xrow))))
dimnames(y)[[2]] <- uniq.cars
y2 <- !is.na(y[, -1])
y2

Jean
	[[alternative HTML version deleted]]

