Hello, everyone! I have a very simple task - I have a data frame (see MyData below) and I need to stack the data (see result below). I wrote the syntax below - it's very basic and it does what I need. But I am sure what I am trying to do is a very typical task and there must be a much shorter/more elegant way of doing it. Any advice?
Thank you very much! MyData<-data.frame(names=c("John","Mary","Paul","Debby"),jan=c(10,15,20,25),feb=c(1,2,3,4)) (MyData) months<-names(MyData)[-1] people<-as.character(MyData[[1]]) ### Creating a temp matrix with people as columns and months as rows: transposed<-apply(MyData[-1],1,t) ### Putting vertical data (months as rows) - for each person - into a list: list.of.stacked<-list() for(i in 1:ncol(transposed)){ list.of.stacked[[i]]<-as.data.frame(matrix(ncol=3,nrow=length(months))) names(list.of.stacked[[i]])<-c("month","values","person") list.of.stacked[[i]][["month"]]<-months list.of.stacked[[i]][["values"]]<-transposed[1:nrow(transposed),i] list.of.stacked[[i]][["person"]]<-people[i] } (list.of.stacked) ### Creating a data frame from the list: result<-do.call(rbind,list.of.stacked) (result) -- Dimitri Liakhovitski Ninah Consulting www.ninah.com ______________________________________________ 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.