If I understand you right,

library(reshape2)
dcast(melt(TestData, id.var = "Subject", measure.var = "Drug"), Subject ~ value)

Michael

On Tue, Mar 20, 2012 at 9:50 AM, Paul Miller <pjmiller...@yahoo.com> wrote:
> Hello All,
>
> I was wondering if it's possible to reshape data from long to wide in R 
> without using a "timevar". I've pasted some sample data below along with some 
> code. The data are sorted by Subject and Drug. I want to transpose the Drug 
> variable into multiple columns in alphabetical order.
>
> My data have a variable called "RowNo" that functions almost like a "timevar" 
> but not quite. In Subject 6, Erlotinib has a RowNo value of 3 whereas 
> Paclitaxel has a RowNo value of 2. So if I use reshape as in the first bit of 
> code below, the columns for drug don't transpose in alphabetical order. That 
> is, Paclitaxel appears in Drug.2 and Erlotinib appears in Drug.3 when it 
> should be the other way around.
>
> The next two bits of code represent a couple of other things I've tried. The 
> cast function almost works but unfortunately makes a separate column for each 
> drug (at least the way I'm using it). The unstack function works almost 
> perfectly but to my surprise creates a list instead of a dataframe (which I 
> understand is a different kind of list). Thought it might take a single line 
> of code to convert the former structure to the latter but this appears not to 
> be the case.
>
> So can I get what I want without adding a timevar to my data? And if do need 
> a timevar, what's the best way to add it?
>
> Thanks,
>
> Paul
>
> connection <- textConnection("
> 005 1 Gemcitabine
> 005 2 Erlotinib
> 006 1 Gemcitabine
> 006 3 Erlotinib
> 006 2 Paclitaxel
> 009 1 Gemcitabine
> 009 2 Erlotinib
> 010 1 Gemcitabine
> 010 2 Erlotinib
> 010 3 Herceptin
> ")
>
> TestData <- data.frame(scan(connection, list(Subject = 0, RowNo = 0, Drug = 
> "")))
> TestData$Subject <- as.integer(TestData$Subject)
> TestData$RowNo <- as.integer(TestData$RowNo)
> TestData$Drug <- as.character(TestData$Drug)
>
> require(reshape)
>
> Transpose <- reshape(TestData, direction="wide", idvar="Subject", 
> timevar="RowNo", v.names="Drug")
> Transpose
>
> Transpose <- melt(TestData, id.var="Subject", measure.var="Drug")
> Transpose <- cast(Transpose, Subject ~ value)
> Transpose
>
> Transpose <- unstack(TestData, Drug ~ Subject)
> Transpose
>
> ______________________________________________
> 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.

______________________________________________
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