Seite 1 von 2
Variablen filtern
Verfasst: Mi Jul 05, 2017 10:35 am
von damkob
Hallo,
Ich arbeite mit einem Datensatz, bei dem Variablen systematisch mit einer eigenen Endung benannt sind, z.B. auto_abc, haus_abc, garten_abc, ... auto_xyz, haus_xyz, garten_xyz, ... auto_xx, haus_xx, garten_xx usw.
Wie kann ich aus diesem relativ komplexen Datensatz einen verkürzten Datensatz erstellen, der nur bestimmte Variablen enthält, z.B auto_xx, haus_xx und garten_xx, also Variablen mit der Endung "_xx"? Das Problem ist, dass die Variablen im Datensatz nicht so schön geordnet sind wie in meinem Beispiel und bei etwa 6000 Variablen und 20 verschiedenen Endungen geht mir langsam die Geduld aus.
Vielen Dank und beste Grüße,
damkob
Re: Variablen filtern
Verfasst: Mi Jul 05, 2017 10:42 am
von jogo
Hallo damkob,
Du müsstest erst
grepl() und dann
which() auf
names(Datensatz) anwenden. Dann bekommst Du einen Indexvektor, den Du dann wieder auf
names(Datensatz) anwenden kannst, um die Namen der gewünschten Spalten zu extrahieren.
... oder Du nimmst gleich den Indexvektor, um die Spalten zu extrahieren:
Gruß, Jörg
Re: Variablen filtern
Verfasst: Mi Jul 05, 2017 10:52 am
von damkob
Hallo,
Ja, vielen Dank. Was mich nur interessiert ist, könnte man den Datensatz nicht einfach drehen (Fälle zu Variablen und Variablen zu Fällen) und dann einen einfachen code schreiben (Quasi Fälle filtern)?
Greüße,
damkob
P.S. Noch eine Frage: Müsste man nicht mit "subset" arbeiten (um einen Datensatz zu erzeugen)?
Re: Variablen filtern
Verfasst: Mi Jul 05, 2017 11:37 am
von jogo
Hallo damkob,
damkob hat geschrieben: Mi Jul 05, 2017 10:52 am
Ja, vielen Dank. Was mich nur interessiert ist, könnte man den Datensatz nicht einfach drehen (Fälle zu Variablen und Variablen zu Fällen) und dann einen einfachen code schreiben (Quasi Fälle filtern)?
das Transponieren ist immer dann problematisch, wenn die Spalten verschiedene Typen haben.
Eine andere gangbare Alternative kann ein
reshape from wide to long sein
https://stackoverflow.com/questions/218 ... ong-format
P.S. Noch eine Frage: Müsste man nicht mit "subset" arbeiten (um einen Datensatz zu erzeugen)?
Es gibt viele Lösungsmöglichkeiten, so dass niemand auf eine bestimmte zurückgreifen muss.
Gruß, Jörg
Re: Variablen filtern
Verfasst: Mi Jul 05, 2017 12:01 pm
von damkob
Hallo Jörg,
Ja, mit dem "müssen" war eine falsche Wortwahl. Sorry.
Also, ich habe jetzt etwas anderes gemacht. Ich habe mir einen Datensatz erstellt mit nur einer Variable und 7596 "Fällen". Diese Fälle sind in wirlichkeit die Variablen aus dem ursprünglichen Datensatz.
Jetzt würde ich geren mittels subset einen Datensatz erzeugen, wo nur die "Fälle" übrig bleiben, die eine entsprechende Endung haben z.B. "_abc".
Der Datensatz mit dieser einen Variable heißt "VAR-ALL". Und nun geht es um den Befehl subset:
VAR_abc <- subset(VAR-ALL, ???)
Das könnte doch auch funktionieren (wenn man die ??? mit einem entsprechenden Code ersetzt), oder?
Grüße,
damkob
Re: Variablen filtern
Verfasst: Mi Jul 05, 2017 12:13 pm
von bigben
Hallo damkop,
etwas in mir schreit: Wie ist so ein DAtensatz entstanden, lass uns näher an der Wurzel des Übels ansetzen. Nun gut, wir sind da, wo wir sind. Verstehst Du unter einem Datensatz einen Dataframe, also eine Tabelle? Oder was verstehst Du darunter?
Bist Du sicher, dass Du in R arbeitest und dass Du eine Variable VAR-ALL hast?? Normalerweise würde R diesen Bindestrich als Minus interpretieren und eine Fehlermeldung machen. Sollte die Variable VAR_ALL heißen, poste bitte mal das Ergebnis von
LG,
Bernhard
Re: Variablen filtern
Verfasst: Mi Jul 05, 2017 12:26 pm
von damkob
Hallo,
Ich habe die Variable nun in "variable" umbenannt.
Der Datensatz besteht jetzt aus einer Spalte (variablen) und 7596 "Fällen". Und nun will ich einfach alle Fälle mit einer bestimmten Endung aus dem Datensatz entfernen und als einen neuen Datesatz mit nur einer Spalte (variablen) und x Fällen (alle mit der gleichen Endung) bekommen. Das würde mir schon reichen.
Grüße,
damkob
Re: Variablen filtern
Verfasst: Mi Jul 05, 2017 12:27 pm
von damkob
Hier das Output
'data.frame': 7596 obs. of 1 variable:
$ variablen: Factor w/ 7596 levels "aa_dum ",..: 3370 3477 992 4988 3029 5847 254 5783 5804 5794 ...
- attr(*, "codepage")= int 1252
variablen
aa_dum : 1
aa_nw : 1
aaaz_dum : 1
aaaz_nw : 1
aah_dum : 1
aah_nw : 1
(Other) :7590
Re: Variablen filtern
Verfasst: Mi Jul 05, 2017 1:22 pm
von damkob
Hallo,
Also, das hat beispielsweise nicht funktioniert:
VAR_gfz <- subset(VAR_ALL, variablen=="_gfz")
Grüße,
damkob
Re: Variablen filtern
Verfasst: Mi Jul 05, 2017 1:35 pm
von damkob
Hallo,
Mit diesem Befehl bin ich einen Schritt weiter geklommen:
VAR_ALL[grep("_gfz",VAR_ALL$variablen),]
[1] ace_gfz brsc_gfz cbs_gfz ...
Das hat also geklappt.
Aber wie implementiere ich diesen Befehl in subset? Und wie bekome ich es, dass diese Variablen im alten Datensatz gelöscht werden?
Grüße,
damkob