quadro de dados de subconjunto por padrão complexo de nomes de colunas

Eu tenho um conjunto de dados que se parece com o seguinte:

duas rodadas de dados (.t0 e.t1)escalas múltiplas (this ethat)vários itens por escala (1, 22, 22a)várias variáveis ​​a serem ignoradas (v2, v3, ignore.t0, ignore.t1, this.t0, this.t1, that.t0, that.t1)

.

dat <- data.frame(id = seq(from=1, to=10, by=1),
                  v2 = rnorm(10),
                  v3 = rnorm(10),
                  ignore.t0 = rnorm(10),
                  this.t0 = rnorm(10),
                  this1.t0 = rnorm(10),
                  this22.t0 = rnorm(10),
                  this22a.t0 = rnorm(10),
                  that.t0 = rnorm(10),
                  that1.t0 = rnorm(10),
                  that22.t0 = rnorm(10),
                  that22a.t0 = rnorm(10),
                  ignore.t1 = rnorm(10),
                  this.t1 = rnorm(10),
                  this1.t1 = rnorm(10),
                  this22.t1 = rnorm(10),
                  this22a.t1 = rnorm(10),
                  that.t1 = rnorm(10),
                  that1.t1 = rnorm(10),
                  that22.t1 = rnorm(10),
                  that22a.t1 = rnorm(10))

Eu quero subconjunto do quadro de dados para incluirid e apenas colunas com:

o nome da escala (this outhat) ANDum número (1.) OU um número e uma letra (22a.) antes do período

Então, no final, o quadro de dados deve se parecer com:

dat2 <- data.frame(
                   id = seq(from=1, to=10, by=1),
                   #v2 = rnorm(10),
                   #v3 = rnorm(10),
                   #ignore.t0 = rnorm(10),
                   #this.t0 = rnorm(10),
                   this1.t0 = rnorm(10),
                   this22.t0 = rnorm(10),
                   this22a.t0 = rnorm(10),
                   #that.t0 = rnorm(10),
                   that1.t0 = rnorm(10),
                   that22.t0 = rnorm(10),
                   that22a.t0 = rnorm(10),
                   #ignore.t1 = rnorm(10),
                   #this.t1 = rnorm(10),
                   this1.t1 = rnorm(10),
                   this22.t1 = rnorm(10),
                   this22a.t1 = rnorm(10),
                   #that.t1 = rnorm(10),
                   that1.t1 = rnorm(10),
                   that22.t1 = rnorm(10),
                   that22a.t1 = rnorm(10))

O quadro de dados é muito maior do que o representado aqui, portanto, não é possível digitar os índices da coluna. Também não é possível procurar apenas os nomes da escala porquethis.t0, this.t1, that.t0ethat.t1 seria pego.

# not quite right
dat2$id <- dat$id
scales <- c("this", "that")
keep.index <- grep(paste(scales,collapse="|"), names(dat))
temp <- dat[keep.index]
dat2 <- cbind(dat2, temp)

Como posso modificar o padrão grep para procurar um número OU (número e caractere) antes do período? Ou existe uma abordagem melhor todos juntos?

questionAnswers(1)

yourAnswerToTheQuestion