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:
this
lubthat
) Inumer (1.
) LUB numer i litera (22a.
) przed okresemW 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?