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]]