On Mar 13, 2012, at 12:18 PM, Houhou Li wrote:
> Hello, R-users,
>
> I have a datafile with 37313 records and each record has 5 different
> measurements on the same variables. The format looks like this:
> treeID, VIG0, VIG1, VIG2, VIG3, VIG4
> I was trying to convert the one row record to 5 rows record with
> format like this (treeID, MEASUREMENT, VIGOR). My code like this:
>
> treeMeas<-matrix(data=0,nrow=(length(tree1$indivTree)*5), ncol=3)
> colnames(treeMeas)<-c("indivTree", "meas",
"vigor")
> for(i in 1:length(tree1$indivTree))
> {
> treeMeas[(i-1)*5+1:(i*5),1]<-tree1$indivTree[i]
You need to review operator precedence (and probably the R-FAQ where I
know that this is also reviewed):
(i-1)*5+1:(i*5) parses as ( 1-1*5) added to 1:(i*5)
> i=37313; length( (i-1)*5+1:(i*5))
[1] 186565
> treeMeas[(i-1)*5+1:(i*5),2]<-c(0:4)
> treeMeas[(i-1)*5+1:(i*5),3]<-c(tree1$VIG0[i], tree1$VIG1[i],
> tree1$VIG2[i], tree1$VIG3[i], tree1$VIG4[i])
Wouldn't this be a whole lot easier with 'reshape' (the base
function)? 0r 'melt' from either reshape package or reshape2 package?
--
David
> }
>
> When I run the code, I always got error message like this " Error in
> treeMeas[(i - 1) * 5 + 1:(i * 5), 1] <- tree1$indivTree[i] :
> subscript out of bounds". I couldn't figure out why subscript out
of
> bounds. Is this because the matrix is too big (186565 by 3)? Any one
> can help? Thank you very much.
>
> Yuzhen
>
> [[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.
David Winsemius, MD
West Hartford, CT