I have a data frame containing monthly observations of the 'density' of each US state, recorded in variables named "density.AL", "density.AK", "density.AZ", and so on for all 50 states. The data frame (called d) also contains a variable called "Date" which is encoded as a string in the format "Jan-09", "Feb-09", etc. I also have a vector st.list<-c("AL", "AK", "AZ",...) of length 50. I would like a new dataframe with st.list in one column and the value of "d$density" for that state when d$Date==Feb-09 in another column. How can I do this? Here is what I have tried: names <- rep("d$density",length(st.list)) templist <- as.vector(mapply(paste, names, st.list ,sep=".")) d.2<-data.frame() for (i in 1:length(templist)) { d.2$density[i] <- subset(parse(file="",templist[i]),d$Date=="Feb-09") i<-i+1 } ### hangs! Thanks for any help! ____________________________________________________________ GET FREE 5GB EMAIL - Check out spam free email with many cool features! Visit http://www.inbox.com/email to find out more!
Hi, Is this what you want? d <- data.frame(density.AL = seq(1, 10), density.AK = seq(1, 10), # many others... Date=letters[1:10]) # dummy example library(reshape) melt(subset(d, Date == "b"), id="Date") BTW, I spotted a few awkward things in your code, st <- c("AL", "AK") vars <- paste("d$density", st, sep=".") # easier than mapply etc. more importantly, in the for loop you should not be incrementing i manually (as in a while loop), it's already taken care of by the for{} construct. HTH, baptiste On 3 Apr 2009, at 10:40, Rob Denniker wrote:> I have a data frame containing monthly observations of the 'density' > of each US state, recorded in variables named "density.AL", > "density.AK", "density.AZ", and so on for all 50 states. The data > frame (called d) also contains a variable called "Date" which is > encoded as a string in the format "Jan-09", "Feb-09", etc. > > I also have a vector st.list<-c("AL", "AK", "AZ",...) of length 50. > > I would like a new dataframe with st.list in one column and the > value of "d$density" for that state when d$Date==Feb-09 in another > column. > > How can I do this? > > Here is what I have tried: > > names <- rep("d$density",length(st.list)) > templist <- as.vector(mapply(paste, names, st.list ,sep=".")) > > d.2<-data.frame() > for (i in 1:length(templist)) { > d.2$density[i] <- subset(parse(file="",templist[i]),d$Date=="Feb-09") > i<-i+1 } ### hangs! > > > Thanks for any help! > > ____________________________________________________________ > GET FREE 5GB EMAIL - Check out spam free email with many cool > features! > Visit http://www.inbox.com/email to find out more! > > ______________________________________________ > 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._____________________________ Baptiste Augui? School of Physics University of Exeter Stocker Road, Exeter, Devon, EX4 4QL, UK Phone: +44 1392 264187 http://newton.ex.ac.uk/research/emag
What a very useful package! Thanks for pointing out its existence. Sadly ?melt is basically useless, but I did find the following quasi-vignette by the author of the reshape package to be quite useful. http://www.jstatsoft.org/v21/i12/paper Cheers.> -----Original Message----- > From: ba208 at exeter.ac.uk > Sent: Fri, 3 Apr 2009 11:02:31 +0100 > To: bearmarketsrule at inbox.com > Subject: Re: [R] Help pasting string as object name > > Hi, > > Is this what you want? > > d <- data.frame(density.AL = seq(1, 10), > density.AK = seq(1, 10), # many others... > Date=letters[1:10]) # dummy example > > library(reshape) > melt(subset(d, Date == "b"), id="Date") > > > BTW, I spotted a few awkward things in your code, > > > st <- c("AL", "AK") > vars <- paste("d$density", st, sep=".") # easier than mapply etc. > > more importantly, in the for loop you should not be incrementing i > manually (as in a while loop), it's already taken care of by the for{} > construct. > > > > HTH, > > baptiste > > On 3 Apr 2009, at 10:40, Rob Denniker wrote: > >> I have a data frame containing monthly observations of the 'density' >> of each US state, recorded in variables named "density.AL", >> "density.AK", "density.AZ", and so on for all 50 states. The data >> frame (called d) also contains a variable called "Date" which is >> encoded as a string in the format "Jan-09", "Feb-09", etc. >> >> I also have a vector st.list<-c("AL", "AK", "AZ",...) of length 50. >> >> I would like a new dataframe with st.list in one column and the >> value of "d$density" for that state when d$Date==Feb-09 in another >> column. >> >> How can I do this? >> >> Here is what I have tried: >> >> names <- rep("d$density",length(st.list)) >> templist <- as.vector(mapply(paste, names, st.list ,sep=".")) >> >> d.2<-data.frame() >> for (i in 1:length(templist)) { >> d.2$density[i] <- subset(parse(file="",templist[i]),d$Date=="Feb-09") >> i<-i+1 } ### hangs! >> >> >> Thanks for any help! >> >> ____________________________________________________________ >> GET FREE 5GB EMAIL - Check out spam free email with many cool >> features! >> Visit http://www.inbox.com/email to find out more! >> >> ______________________________________________ >> 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. > > _____________________________ > > Baptiste Augui? > > School of Physics > University of Exeter > Stocker Road, > Exeter, Devon, > EX4 4QL, UK > > Phone: +44 1392 264187 > > http://newton.ex.ac.uk/research/emag > __________________________________________________________________________________________ GET FREE 5GB EMAIL - Check out spam free email with many cool features! Visit http://www.inbox.com/email to find out more!