Hello, I tried using reshape to rearrange my data to long format but I could not get the output the table they way I wanted it. Anyway I came up with a hack that does works, but I still would like to know if I can do it with reshape. Here is my code and a dummy set of data. It returns the data in the format I would like it. dat <- read.table(text="region state species1 species2 species3 sydney nsw 0 1 1 canberra act 1 1 0", header=T) nonspecvars <- c("region","state") dats <- split(dat, 1:nrow(dat)) dat2 <- lapply(dats,function(x){ datspec <- x[,-match(nonspecvars,names(x))] specnames <- names(datspec) presence <- unname(unlist(datspec)) x2 <- x[rep(1,length(specnames)),match(nonspecvars,names(x))] x2$species <- specnames x2$presence <- presence return(x2) }) do.call(rbind, dat2) Cheers, Daisy -- Daisy Englert Duursma Department of Biological Sciences Room E8C156 Macquarie University, North Ryde, NSW 2109 Australia
Hi, Daisy, try dat2 <- reshape( dat, varying = c( "species1", "species2", "species3"), v.name = "presence", timevar = "species", times = c( "species1", "species2", "species3"), direction="long") dat2[ rev( order( dat2$region)), ] Hth -- Gerrit On Thu, 24 Jan 2013, Daisy Englert Duursma wrote:> Hello, > > I tried using reshape to rearrange my data to long format but I could > not get the output the table they way I wanted it. Anyway I came up > with a hack that does works, but I still would like to know if I can > do it with reshape. > > Here is my code and a dummy set of data. It returns the data in the > format I would like it. > > > dat <- read.table(text="region state species1 species2 species3 > sydney nsw 0 1 1 > canberra act 1 1 0", header=T) > > nonspecvars <- c("region","state") > > dats <- split(dat, 1:nrow(dat)) > dat2 <- lapply(dats,function(x){ > > datspec <- x[,-match(nonspecvars,names(x))] > specnames <- names(datspec) > presence <- unname(unlist(datspec)) > > x2 <- x[rep(1,length(specnames)),match(nonspecvars,names(x))] > x2$species <- specnames > x2$presence <- presence > return(x2) > > }) > > do.call(rbind, dat2) > > > Cheers, > Daisy > > > > -- > Daisy Englert Duursma > Department of Biological Sciences > Room E8C156 > Macquarie University, North Ryde, NSW 2109 > Australia > > ______________________________________________ > 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.
HI, You could use: library(reshape) ?res<-melt(dat,id.var=c("region","state")) names(res)[3:4]<-c("species","presence") res<-res[rev(order(res$region,res$state)),] ?row.names(res)<- 1:nrow(res) ?res ? #? region state? species presence #1?? sydney?? nsw species3??????? 1 #2?? sydney?? nsw species2??????? 1 #3?? sydney?? nsw species1??????? 0 #4 canberra?? act species3??????? 0 #5 canberra?? act species2??????? 1 #6 canberra?? act species1??????? 1 A.K. ----- Original Message ----- From: Daisy Englert Duursma <daisy.duursma at gmail.com> To: "r-help at R-project.org" <r-help at r-project.org> Cc: Sent: Thursday, January 24, 2013 5:06 AM Subject: [R] long format with reshape Hello, I tried using reshape to rearrange my data to long format but I could not get the output the table they way I wanted it. Anyway I came up with a hack that does works, but I still would like to know if I can do it with reshape. Here is my code and a dummy set of data. It returns the data in the format I would like it. dat <- read.table(text="region state species1 species2 species3 ? ? ? ? ? ? ? ? ? ? ? ? sydney nsw 0 1 1 ? ? ? ? ? ? ? ? ? ? ? ? canberra act 1 1 0", header=T) nonspecvars <- c("region","state") dats <- split(dat, 1:nrow(dat)) dat2 <- lapply(dats,function(x){ ? datspec <- x[,-match(nonspecvars,names(x))] ? specnames <- names(datspec) ? presence <- unname(unlist(datspec)) ? x2 <- x[rep(1,length(specnames)),match(nonspecvars,names(x))] ? x2$species <- specnames ? x2$presence <- presence ? return(x2) }) do.call(rbind, dat2) Cheers, Daisy -- Daisy Englert Duursma Department of Biological Sciences Room E8C156 Macquarie University, North Ryde, NSW 2109 Australia ______________________________________________ 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.