[R] Reshaping a table

David L Carlson dcarlson at tamu.edu
Mon Apr 8 18:16:56 CEST 2013


If you are starting with a table rather than a data frame, try this

> # Convert Arun's data.frame, dat1, to a table, dat2
> dat2 <- as.table(as.matrix(data.frame(dat1[,2:3], row.names=dat1[,1])))
> # convert dat2 to form requested
> dat3 <- data.frame(dat2)
> dat4 <- dat3[rep(1:nrow(dat3), dat3$Freq),1:2]
> colnames(dat4) <- c("X", "Y")
> rownames(dat4) <- NULL
> dat4
    X  Y
1 0.1 Y1
2 0.1 Y1
3 0.1 Y1
4 0.2 Y1
5 0.2 Y1
6 0.1 Y2
7 0.1 Y2
8 0.2 Y2

X and Y are factors. If you want them to be character vectors add:

> dat4 <- data.frame(sapply(dat4, as.character), stringsAsFactors=FALSE)

----------------------------------------------
David L Carlson
Associate Professor of Anthropology
Texas A&M University
College Station, TX 77843-4352



> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-
> project.org] On Behalf Of arun
> Sent: Monday, April 08, 2013 7:41 AM
> To: IOANNA
> Cc: R help
> Subject: Re: [R] Reshaping a table
> 
> Hi,
> Try this:
> dat1<-read.table(text="
> X      Y1    Y2
> 
> 0.1  3      2
> 
> 0.2  2      1
> ",sep="",header=TRUE)
> 
> 
>  res<-do.call(rbind,lapply(split(dat1,seq_len(nrow(dat1))),function(x)
> {Y=rep(colnames(x)[-1],x[-1]); X=rep(x[,1],length(Y));
> data.frame(X,Y,stringsAsFactors=FALSE)}))
>  row.names(res)<- 1:nrow(res)
>  res
> #    X  Y
> #1 0.1 Y1
> #2 0.1 Y1
> #3 0.1 Y1
> #4 0.1 Y2
> #5 0.1 Y2
> #6 0.2 Y1
> #7 0.2 Y1
> #8 0.2 Y2
> A.K.
> 
> 
> 
> ----- Original Message -----
> From: IOANNA <ii54250 at msn.com>
> To: 'r-help-r-project.org' <r-help at r-project.org>
> Cc:
> Sent: Monday, April 8, 2013 8:09 AM
> Subject: [R] Reshaping a table
> 
> Hello all,
> 
> 
> 
> I have data in the form of a table:
> 
> 
> 
> X      Y1    Y2
> 
> 0.1   3       2
> 
> 0.2   2       1
> 
> 
> 
> And I would like to transform in the form:
> 
> 
> 
> X     Y
> 
> 0.1   Y1
> 
> 0.1   Y1
> 
> 0.1   Y1
> 
> 0.1   Y2
> 
> 0.1   Y2
> 
> 0.2  Y1
> 
> 0.2  Y1
> 
> 0.2  Y2
> 
> 
> 
> Any ideas how?
> 
> 
> 
> Thanks in advance,
> 
> IOanna
> 
> 
> 
> 
> 
> 
> 
> 
>     [[alternative HTML version deleted]]
> 
> ______________________________________________
> 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.
> 
> 
> ______________________________________________
> 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