saschaview at gmail.com
2011-Dec-01 18:30 UTC
[R] transform data.frame holding answers --> data.frame holding logicals
Hello
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 at gmail.com
Jean V Adams
2011-Dec-01 19:42 UTC
[R] transform data.frame holding answers --> data.frame holding logicals
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.comTry 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]]