subset marco de datos por patrón complejo de nombres de columna
Tengo un conjunto de datos que se parece a lo siguiente:
dos rondas de datos (.t0
y.t1
)escalas múltiples (this
ythat
)varios artículos por escala (1
, 22
, 22a
)varias variables para ignorar (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))
Quiero subcontratar el marco de datos para incluirid
y solo columnas con:
this
othat
) Yun número (1.
) O un número y una letra (22a.
) antes del periodoAsí que al final, el marco de datos debería verse como:
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))
El marco de datos es mucho más grande de lo que se representa aquí, por lo que no es posible escribir los índices de columna. Tampoco es posible simplemente buscar los nombres de escala porquethis.t0
, this.t1
, that.t0
ythat.t1
sería atrapado
# 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)
¿Cómo puedo modificar el patrón grep para buscar un número O (número y carácter) antes del período? ¿O hay un mejor enfoque todos juntos?