Seems to get complicated ;-).... As always, i expect more sophisticted solutions than mine to exist, but I would try the following:
If II understood you correct you want to compute the means of all the k.1.x, then k.2.x ....., correct? I would do it this way col.index <- sub('[.].*$','',sub('^.?[.]','',colnames(the.data))) min.values=numeric(length=10) for (i in 1:10) min[i]<-min(the.data[,col.index==i]) Perhaps you have to adapt the code slightly as I did not test it. HTH Jannis col.index <- unlist(strsplit(colnames(the.data),'\\.'))[2] --- 09wkj <bill.k.jan...@williams.edu> schrieb am Di, 8.6.2010: > Von: 09wkj <bill.k.jan...@williams.edu> > Betreff: Re: [R] iterating over groups of columns > An: r-help@r-project.org > CC: "Jannis" <bt_jan...@yahoo.de> > Datum: Dienstag, 8. Juni, 2010 22:32 Uhr > In the code fragment, I used 'by' to > actually compute the min value (part of the statement with > the eval) - and I agree that an apply would work there > wonderfully. > > However, my hope was to use an apply for the subsetting of > the data.frame's columns, so that I could then use an apply > to compute the min across each row of the subsets. > > Something that would give me the results of the following, > but programmatically: > apply(the.data[,1], 1, min) #min > of the first column > apply(the.data[,2:3], 1, min) #min of the next > 2 columns > apply(the.data[,4:6], 1, min) #min of the next > 3 columns > apply(the.data[,7:10], 1, min) #min of the next 4 > columns > ... > apply(the.data[,46:55], 1, min)#min of the next 10 columns > > > > Like, can I make a vector of levels with 'rep(1:10,1:10)', > and then apply the function across all columns in each > level? And then how could I cbind them together? > > > Thanks for any help, > Bill > > > > > On Jun 8, 2010, at 5:08 PM, Jannis wrote: > > > you should have found a solution for that in the help > page of apply. > > > > just run > > > > min.values = apply(the.data,1,min) > > > > the '1' marks the direction (e.g. whether apply is > applied to rows or columns), it could be a 2 as well. Check > that yourself in the apply documentation. > > > > Then run rbind(the.data,min.values) (could be cbind as > well, I am not sure again ;-) ) and you get what you want. > > > > 09wkj schrieb: > >> I am mainly a Java/C++ programmer, so my mind is > used to iterating over data with for loops. After a long > break, I am trying to get back into the "R mindset", but I > could not find a solution in the documentation for the > applys, aggregate, or by. > >> > >> I have a data.frame where each row is an entry > with 10 groups of measurements. The first measurement spans > 1 column, the second spans 2 columns, third 3, and so on (55 > total columns). What I want to do is add to my data.frame 10 > new columns containing the minimum value of each > measurement. > >> > >> dim(the.data) > >> [1] 1679 55 > >> > >> > >>> colnames(the.data) > >>> > >> [1] > "k.1.1" "k.2.1" "k.2.2" "k.3.1" "k.3.2" "k.3.3" "k.4.1" > [8] > "k.4.2" "k.4.3" "k.4.4" "k.5.1" "k.5.2" "k.5.3" "k.5.4" [15] > "k.5.5" "k.6.1" "k.6.2" "k.6.3" "k.6.4" "k.6.5" "k.6.6" [22] > "k.7.1" "k.7.2" "k.7.3" "k.7.4" "k.7.5" "k.7.6" "k.7.7" [29] > "k.8.1" "k.8.2" "k.8.3" "k.8.4" "k.8.5" "k.8.6" "k.8.7" [36] > "k.8.8" "k.9.1" "k.9.2" "k.9.3" "k.9.4" "k.9.5" "k.9.6" [43] > "k.9.7" "k.9.8" "k.9.9" "k.10.1" > "k.10.2" "k.10.3" "k.10.4" [50] > "k.10.5" "k.10.6" "k.10.7" "k.10.8" > "k.10.9" "k.10.10" > >> > >> I want to add to the.data new columns: min.k.1, > min.k.2, ..., min.k.10 > >> > >> This is the section of code I would like to > improve, hopefully getting rid of the eval and the for > loop: > >> > >> for(k in 1:10){ > >> s <- subset(the.data, > select=paste("k", k, 1:k, sep=".")) > >> eval(parse(text = > paste("the.data$min.k.", k, "<-as.vector(by(s, 1:nrow(s), > min))", sep=""))) > >> } > >> > >> Thanks for any help, > >> Bill > >> ______________________________________________ > >> 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. > >> > >> > > > > ______________________________________________ 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.