[R] Converting a dataframe to a matrix

markleeds at verizon.net markleeds at verizon.net
Wed Mar 11 07:43:39 CET 2009


Hi: Below works but it's extremely ugly and overly complicated. i'm sure 
someone else will send you something better  and I'll be waiting also.
Also, the way I named the rows and columns works for below but it won't 
hold in the general case if you don't have nice ordered names like
you do below. So, use it until we something better.

DF <- read.table(textConnection("name color likes
1 sally red 0
2 sally blue 1
3 sally green 1
4 jake red 0
5 jake blue  1
6 jake green 1
7 tom red 1
8 tom blue 0
9 tom green 0"),header=TRUE,stringsAsFactors=FALSE)


mat <- matrix(sapply(1:nrow(DF),function(.row) {
     DF[.row,3]
 
}),nrow=length(unique(DF$name)),byrow=TRUE,dimnames=list(c(unique(DF$name)),c(unique(DF$color))))

print(mat)





On Wed, Mar 11, 2009 at 12:42 AM, Jennifer Brea wrote:

> If I have a dataframe which is organized like this:
>
>   name color likes?
> 1 sally   red    0
> 2 sally  blue    1
> 3 sally green    1
> 4  jake   red    0
> 5  jake  blue    1
> 6  jake green    1
> 7   tom   red    1
> 8   tom  blue    0
> 9   tom green    0
>
>
> And I want to create a matrix in the form:
>
>      red blue green
> sally   0    1     1
> jake    0    1     1
> tom     1    0     0
>
>
> Are there any built-in commands that might help me do this?  Also, I 
> can't assume that there is an observation for every person-color.  In 
> other words, in the original dataset, there might be some colors for 
> which sally offered no opinion.  In some cases, this may be 
> represented by NA, in others, it may mean that no row exists for sally 
> for that color.
>
> Thank you!
>
> ______________________________________________
> R-help at 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.




More information about the R-help mailing list