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:
this
outhat
) ANDum número (1.
) OU um número e uma letra (22a.
) antes do períodoEntã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.t0
ethat.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?