Dear R users, i have a matrix with 31 rows and 444 columns and i want to extract every 37th column of that matrix starting from 1. more precisely i want to select columns 1, 38,75, 112 and so on. then doing the same by starting from column number 2(2,39,76,113.......). i know that there is a manual way of doing it but i wanted to make it more quickly as i have fairly large data to dealth with. thanks in advance eliza [[alternative HTML version deleted]]
x[c(TRUE, rep(FALSE, 36)),] and let recycling work its magic! To concretize: x <- 1:100 x[c(TRUE, rep(FALSE, 4))] Cheers, Michael On Tue, Sep 18, 2012 at 3:55 PM, eliza botto <eliza_botto at hotmail.com> wrote:> > Dear R users, > i have a matrix with 31 rows and 444 columns and i want to extract every 37th column of that matrix starting from 1. more precisely i want to select columns 1, 38,75, 112 and so on. then doing the same by starting from column number 2(2,39,76,113.......). > i know that there is a manual way of doing it but i wanted to make it more quickly as i have fairly large data to dealth with. > > thanks in advance > eliza > [[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.
On 18-09-2012, at 16:55, eliza botto wrote:> > Dear R users, > i have a matrix with 31 rows and 444 columns and i want to extract every 37th column of that matrix starting from 1. more precisely i want to select columns 1, 38,75, 112 and so on. then doing the same by starting from column number 2(2,39,76,113.......). > i know that there is a manual way of doing it but i wanted to make it more quickly as i have fairly large data to dealth with. >Indexing with c(1,seq_len((length(x)-1)/M)*M+1) is also an option. It appears to be faster than Michael's method. N <- 444 a <- 1:N f1 <- function(x,M) { x[c(TRUE,rep(FALSE,M-1))] } f2 <- function(x,M) { x[c(1,seq_len((length(x)-1)/M)*M+1)] } M <- 37 M z1 <- f1(a,M) z2 <- f2(a,M)> identical(z1,z2)[1] TRUE Nrep <- 100000 library(rbenchmark) benchmark(f1(a,M), f2(a,M), replications=Nrep)> benchmark(f1(a,M), f2(a,M), replications=Nrep)test replications elapsed relative user.self sys.self user.child 1 f1(a, M) 100000 1.395 1.437 1.367 0.027 0 2 f2(a, M) 100000 0.971 1.000 0.959 0.011 0 For N <- 4440 the timings are> benchmark(f1(a,M), f2(a,M), replications=Nrep)test replications elapsed relative user.self sys.self user.child 1 f1(a, M) 100000 4.636 2.483 4.569 0.065 0 2 f2(a, M) 100000 1.867 1.000 1.714 0.153 0 Berend