подмножество фрейма данных по сложному шаблону имен столбцов
У меня есть набор данных, который выглядит следующим образом:
два раунда данных (.t0
а также.t1
)несколько шкал (this
а такжеthat
)несколько предметов в масштабе (1
, 22
, 22a
)несколько переменных игнорировать (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))
Я хочу, чтобы включить подкадр данных, чтобы включитьid
и только столбцы с:
this
или жеthat
) А ТАКЖЕчисло (1.
) ИЛИ число и буква (22a.
) до периодаИтак, в конце концов, фрейм данных должен выглядеть так:
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))
Фрейм данных намного больше, чем представлен здесь, поэтому ввод индексов столбцов невозможен. Также невозможно просто искать имена шкал, потому чтоthis.t0
, this.t1
, that.t0
, а такжеthat.t1
будет пойман.
# 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)
Как я могу изменить шаблон grep для поиска числа ИЛИ (числа и символа) перед точкой? Или есть лучший подход все вместе?