Werte Labeln aus anderer Datei

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Eule10
Beiträge: 6
Registriert: Fr Jun 19, 2020 8:36 pm

Werte Labeln aus anderer Datei

Beitrag von Eule10 »

Hallo Zusammen,
ich bin recht neu in R und habe derzeit ein kleines Problem. Ich habe eine Variable (reg_id) in einem data.frame (mehrere Variablen) mit Nummern (z.B. 156784, 156785 usw.).
In einem zweiten data.frame habe ich die dazugehörigen Labels. Das zweit data.frame besteht nur aus der List/Variable (reg_id) und einer string-Variablen mit den konkreten Labels (Labels). Nun würde ich gern die Informationen aus dem zweiten Data.frame (labels) nutzen um über die Werte in der Variable reg_id im ersten data.frame zu labeln (nicht ersetzen). Wie mache ich sowas?
Ich weiß es ist wahrscheinlich kein Problem, aber ich verzweifle gerade dabei eine Lösung zu finden. Ich finde immer nur wie man so was händisch macht, aber bei über 2000 verschiedenen Werten möchte ich das nicht per Hand programmieren müssen. Das geht doch bestimmt auch einfacher. Oder?
Vielen Dank,
Eule10
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Werte Labeln aus anderer Datei

Beitrag von bigben »

Hallo Eule10,
Eule10 hat geschrieben: Fr Jun 19, 2020 8:54 pmDas zweit data.frame besteht nur aus der List/Variable (reg_id)
Was ist eine List/Variable?
Nun würde ich gern die Informationen aus dem zweiten Data.frame (labels) nutzen um über die Werte in der Variable reg_id im ersten data.frame zu labeln (nicht ersetzen).
Was bedeutet "über Werte zu labeln"?
Wie mache ich sowas?
Sinnvollerweise erklärst Du erstmal eindeutig, was Du machen willst. Erfahrungsgemäß ist dabei nichts hilfreicher, als ein konkretes Beispiel mit Code für zwei kleine Dataframes, die Deinem eigentlichen Problem analog sind und einer Musterlösung, was aus den beiden Dataframes werden soll.
Das geht doch bestimmt auch einfacher. Oder?
Ganz bestimmt, aber momentan kann ich mir mindestens zwei Dinge vorstellen, die gemeint sein könnten und bin nicht sicher, dass eines davon wirklich trifft.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Benutzeravatar
student
Beiträge: 674
Registriert: Fr Okt 07, 2016 9:52 am

Re: Werte Labeln aus anderer Datei

Beitrag von student »

Hallo Eule10,

versuch es mal mit den Funktionen merge:

Code: Alles auswählen

DF: DataFrame

DF_neu <- merge(DF_1, DF_2, by = "reg_id)"))
Schau Dir mal die Hilfe und die merge-Varianten dazu an.
Viele Grüße,
Student
-----------------------------------------------------------------------------------------------------------------------
faes.de, Datenanalyse mit R & das Ad-Oculos-Projekt
Das Ad-Oculos-Projekt auf YouTube

Habe Mut, dich deines eigenen Verstandes zu bedienen! (Kant)
Eule10
Beiträge: 6
Registriert: Fr Jun 19, 2020 8:36 pm

Re: Werte Labeln aus anderer Datei

Beitrag von Eule10 »

Hallo,
Danke erstmal für die Ideen und die Rückmeldungen.
Ich versuche es mal deutlicher (hoffe ich)
Ich habe daten.frame "data"

data
'data.frame': 1012 obs. of 8 variables:
$ id14111 : chr "D" "D" "D" "D" ...
$ KREISE : num 16051 16051 16051 16051 16051 ...
$ PART04 : chr "AFD" "AFD" "B90-GRUENE" "B90-GRUENE" ...
$ STAG : chr "22.09.2013" "24.09.2017" "16.10.1994" "27.09.1998" ...
$ WAHL09_val : num 7366 23041 8111 7342 8209 ...
$ WAHL09_qual: chr "e" "e" "e" "e" ...
$ WAHL09_lock: logi NA NA NA NA NA NA ...
$ WAHL09_err : num 0 0 0 0 0 0 0 0 0 0 ...

Dort habe ich die Variable Kreise. Die Werte dieser variable möchte ich labeln mit den Daten aus datenframe "metadata"
In diesem datensatz befinden sich die Werte von Kreis und die dazugehörigen labels in "description" als string.

metadata
'data.frame': 489 obs. of 2 variables:
$ KREISE : chr "01001" "01002" "01003" "01004" ...
$ description: chr "Flensburg, Kreisfreie Stadt" "Kiel, Landeshauptstadt, Kreisfreie Stadt" "Lübeck, Hansestadt, Kreisfreie Stadt" "Neumünster, Kreisfreie Stadt" ...

Ich möchte also descrition aus metadata als wertelabels für KREISE in data verwenden.
Ich hoffe das war klarer.
Vielen Dank für eure Mühe,
Eule10
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Werte Labeln aus anderer Datei

Beitrag von EDi »

In dem einen ist aber KREISE numerisch in dem anderen ein Character (mit führenden Null), passen dieses wirklich zusammen?

Ansonsten ist wie Student schon sagte, merge() die Funktion der Wahl.
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Werte Labeln aus anderer Datei

Beitrag von bigben »

Wobei R einen beängstigend lockeren Umgang mit Strings und Zahlen pflegt :o

Code: Alles auswählen

> "42" == 42
[1] TRUE
Deshalb kann merge auch Strings und Zahlen zueinander matchen:

Code: Alles auswählen

a <- data.frame(id=c(1, 2, 1, 3, 1, 4), daten = 1:6)
b <- data.frame(id=c("1", "2", "3", "4"), name = c("eins", "zwei", "drei", "vier"))

merge(a,b, by="id")
Machen sollte man das trotzdem nicht unbedingt. Ganz bestimmt nicht, wenn es, wie bei Postleitzahlen, führende Nullen geben kann:

Code: Alles auswählen

> "007" == 7
[1] FALSE
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Benutzeravatar
student
Beiträge: 674
Registriert: Fr Okt 07, 2016 9:52 am

Re: Werte Labeln aus anderer Datei

Beitrag von student »

Hallo Eule10,

sorge dafür das die Variable
$ KREISE : chr "01001" "01002" "01003" "01004" ...
numerisch ist (dann sind die führenden Nullen weg) und dann sollte
DF_neu <- merge(data, metadata, by = "KREISE)"))
funktionieren.
Viele Grüße,
Student
-----------------------------------------------------------------------------------------------------------------------
faes.de, Datenanalyse mit R & das Ad-Oculos-Projekt
Das Ad-Oculos-Projekt auf YouTube

Habe Mut, dich deines eigenen Verstandes zu bedienen! (Kant)
Eule10
Beiträge: 6
Registriert: Fr Jun 19, 2020 8:36 pm

Re: Werte Labeln aus anderer Datei

Beitrag von Eule10 »

Hallo Zusammen,
vielen, vielen Dank für die Hinweise. Es ist schon einmal ein Fortschritt das ich nun die Labels in dem Datensatz habe. Zur Not geht das auch. Im Grunde ist - wenn ich die Literatur übers Wochenende richtig gelesen habe - die Variable KREISE data.frame "data" ein nominaler Faktor (integer). Die dazugehörigen Labels/levels befinden sich im data.frame "metadaten" in Variable description. Diese strings würde ich nun gern als (Werte)labels (levels) im data.frame "data" (KREISE) verwenden. Ich möchte keine zusätzliche Variable haben, sondern lediglich die Werte in data.frame "data" KREISE labeln. Ich könnte es auch wie bigben beschrieben hat händisch programmieren, aber bei über 1000 labels/levels würde ich mir diese Mühe gern ersparen.
BG,
Eule10
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Werte Labeln aus anderer Datei

Beitrag von bigben »

Hallo Eule10,
Ich könnte es auch wie bigben beschrieben hat händisch programmieren
Vor allem habe ich mal eine Reihe von Fragen gestellt, auf die Du nicht antwortest.

wenn Du mit labeln das meinst, was ich vermute, dann hilft vielleicht das hier:

Code: Alles auswählen

werte <- 1:5
label <-  c("eins", "zwei", "drei", "vier", "fünf")

names(werte) <-label

print(werte)

str(werte)
Vielleicht meinst Du auch was anderes, aber wenn Du nicht sagen willst, was Du meinst, ist das Dein Ding.

HTH,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Eule10
Beiträge: 6
Registriert: Fr Jun 19, 2020 8:36 pm

Re: Werte Labeln aus anderer Datei

Beitrag von Eule10 »

Es ist nich so das ich es nicht will, anscheinend kann ich es nicht. Ich versuche es nocheinmal bitte nehmt es mir nicht übel es ist kein böser wille.

Du schreibst folgenden code:
Ich verstehe es folgendermaßen.
es wird eine variable generiert mit den Werten 1-5
werte <- 1:5
anschließend werden wertelabels generiert
label <- c("eins", "zwei", "drei", "vier", "fünf")
und hier werden diese labels den numerischen werten zugeordent
names(werte) <-label

Genau darin besteht mein Problem:
Ich habe einen Datensatz:

data
'data.frame': 1012 obs. of 8 variables:
$ id14111 : chr "D" "D" "D" "D" ...
$ KREISE : num 16051 16051 16051 16051 16051 ...
$ PART04 : chr "AFD" "AFD" "B90-GRUENE" "B90-GRUENE" ...
$ STAG : chr "22.09.2013" "24.09.2017" "16.10.1994" "27.09.1998" ...
$ WAHL09_val : num 7366 23041 8111 7342 8209 ...
$ WAHL09_qual: chr "e" "e" "e" "e" ...
$ WAHL09_lock: logi NA NA NA NA NA NA ...
$ WAHL09_err : num 0 0 0 0 0 0 0 0 0 0 ...

In der varibale/faktor KREISE sind die empirischen Werte ohne labels/namen.

In Datensatz zwei
metadata
'data.frame': 489 obs. of 2 variables:
$ KREISE : chr "01001" "01002" "01003" "01004" ...
$ description: chr "Flensburg, Kreisfreie Stadt" "Kiel, Landeshauptstadt, Kreisfreie Stadt" "Lübeck, Hansestadt, Kreisfreie Stadt" "Neumünster, Kreisfreie Stadt" ...

befinden sich die labels/namen und die entprechenden Werte.
Ich möchte das der wert 01001 in Variable KREISE data.frame data mit "Flensburg, Kreisfreie Stadt" gelabelt wird, der Wert 01002 mit Kiel "Kiel, Landeshauptstadt, Kreisfreie Stadt" und so weiter. Die wrete sind da, die labels sind da leider in zwei daten.frames und ich bekommen sie nicht zusammen.

Also names(KREISE data.frame data) <-label(description data.frame metadata)

BG,
Eule10
Antworten