Untersatzdatenrahmen durch komplexes Muster von Spaltennamen

Ich habe einen Datensatz, der wie folgt aussieht:

zwei Datenrunden (.t0 und.t1)mehrere Skalen (this undthat)mehrere Artikel pro Waage (1, 22, 22a)mehrere Variablen zu ignorieren (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))

Ich möchte den einzuschließenden Datenrahmen unterteilenid und nur Spalten mit:

der Waagenname (this oderthat) UNDeine Zahl (1.) ODER eine Zahl und ein Buchstabe (22a.) vor der Periode

Am Ende sollte der Datenrahmen also so aussehen:

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

Der Datenrahmen ist viel größer als hier dargestellt, sodass das Eingeben der Spaltenindizes nicht möglich ist. Es ist auch nicht möglich, nur nach den Skalennamen zu suchen, weilthis.t0, this.t1, that.t0, undthat.t1 würde gefangen werden.

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

Wie kann ich das Grep-Muster ändern, um vor dem Punkt nach einer Zahl ODER (Zahl und Zeichen) zu suchen? Oder gibt es insgesamt einen besseren Ansatz?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage