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:
this
oderthat
) UNDeine Zahl (1.
) ODER eine Zahl und ein Buchstabe (22a.
) vor der PeriodeAm 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?