podzbiór ramki danych według złożonego wzorca nazw kolumn

Mam zestaw danych, który wygląda następująco:

dwie rundy danych (.t0 i.t1)wiele skal (this ithat)kilka elementów w skali (1, 22, 22a)kilka zmiennych do zignorowania (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))

Chcę ustawić ramkę danych w celu uwzględnieniaid i tylko kolumny z:

nazwa skali (this lubthat) Inumer (1.) LUB numer i litera (22a.) przed okresem

W końcu ramka danych powinna wyglądać tak:

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))

Ramka danych jest znacznie większa niż ta, która jest tutaj przedstawiona, więc wpisywanie indeksów kolumn nie jest możliwe. Nie można też po prostu szukać nazw skali, ponieważthis.t0, this.t1, that.t0, ithat.t1 zostanie złapany.

# 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)

Jak mogę zmodyfikować wzorzec grep, aby wyszukać numer OR (numer i znak) przed okresem? A może razem jest lepsze podejście?

questionAnswers(1)

yourAnswerToTheQuestion