Subset in R
Subset in R
Hallo zusammen!
Ich bin blutiger R Anfänger und wäre über eure Hilfe sehr dankbar.
Ich habe momentan einen Datensatz mit verschiedenen Unternehmen und einem Zeitraum von 2005-2020. Für meine spätere Analyse muss der komplette Datensatz nach den Unternehmen aufgeteilt werden. Der Datensatz beinhaltet die Codes der Unternehmen und auch die Namen der Unternehmen.
Gibt es hier die Möglichkeit, den "großen" Datensatz direkt in verschiedene Datensätze (mit jeweils nur ein Unternehmen) aufzuteilen?
Der Datensatz sieht bspw. so aus. Ich möchte nun einen Datensatz erstellen, nur nur "Beispiel Unternehmen 1" und logischerweise die Kennzahlen zum Unternehmen.
Code Name Jahr
1 Beispiel Unternehmen 1 2005
1 Beispiel Unternehmen 1 2006
1 Beispiel Unternehmen 1 2007
1 Beispiel Unternehmen 1 2008
1 Beispiel Unternehmen 1 2009
1 Beispiel Unternehmen 1 2010
1 Beispiel Unternehmen 1 2011
2 Beispiel Unternehmen 2 2005
2 Beispiel Unternehmen 2 2006
2 Beispiel Unternehmen 2 2007
2 Beispiel Unternehmen 2 2008
2 Beispiel Unternehmen 2 2009
2 Beispiel Unternehmen 2 2010
2 Beispiel Unternehmen 2 2011
Ich hoffe es war halbwegs verständlich. Danke!
Ich bin blutiger R Anfänger und wäre über eure Hilfe sehr dankbar.
Ich habe momentan einen Datensatz mit verschiedenen Unternehmen und einem Zeitraum von 2005-2020. Für meine spätere Analyse muss der komplette Datensatz nach den Unternehmen aufgeteilt werden. Der Datensatz beinhaltet die Codes der Unternehmen und auch die Namen der Unternehmen.
Gibt es hier die Möglichkeit, den "großen" Datensatz direkt in verschiedene Datensätze (mit jeweils nur ein Unternehmen) aufzuteilen?
Der Datensatz sieht bspw. so aus. Ich möchte nun einen Datensatz erstellen, nur nur "Beispiel Unternehmen 1" und logischerweise die Kennzahlen zum Unternehmen.
Code Name Jahr
1 Beispiel Unternehmen 1 2005
1 Beispiel Unternehmen 1 2006
1 Beispiel Unternehmen 1 2007
1 Beispiel Unternehmen 1 2008
1 Beispiel Unternehmen 1 2009
1 Beispiel Unternehmen 1 2010
1 Beispiel Unternehmen 1 2011
2 Beispiel Unternehmen 2 2005
2 Beispiel Unternehmen 2 2006
2 Beispiel Unternehmen 2 2007
2 Beispiel Unternehmen 2 2008
2 Beispiel Unternehmen 2 2009
2 Beispiel Unternehmen 2 2010
2 Beispiel Unternehmen 2 2011
Ich hoffe es war halbwegs verständlich. Danke!
Re: Subset in R
Hallo kingerde,
ich denke es war verständlich, ich denke aber nicht, dass es eine gute Idee ist. Wenn Du uns erzählst, was Du im weiteren Verlauf mit den Daten machen willst, dann können wir wahrscheinlich eine bessere Lösung anbieten.
Aber das hier geht auch:
Die ersten vier Zeilen sind nur zum Erstellen und Darstellen eines Datenbeispiels. Die letzte Zeile zerteilt den Dataframe in Stücke mit lauter gleichen Firmennamen und Du bekommst dann eine Liste dieser Dataframes zurück:
Das läuft so nur in der neuesten R-Version, dürfte aber die gestellte Frage beantworten. Wie gesagt, es hilft wahrscheinlich, wenn Du uns das große Bild beschreibst. Siehe auch: https://de.wikipedia.org/wiki/XY-Problem
LG,
Bernhard
ich denke es war verständlich, ich denke aber nicht, dass es eine gute Idee ist. Wenn Du uns erzählst, was Du im weiteren Verlauf mit den Daten machen willst, dann können wir wahrscheinlich eine bessere Lösung anbieten.
Aber das hier geht auch:
Code: Alles auswählen
bsp <- data.frame(name = rep(c("ADAC", "Allianz", "BASF"), each = 5),
jahr = rep(2015:2019),
wert = round(runif(15, 0, 1000),2))
print(bsp) # so sehen meine Beispieldaten aus
lapply(unique(bsp$name), \(n) subset(bsp, name == n))
Code: Alles auswählen
liste <- lapply(unique(bsp$name), \(n) subset(bsp, name == n))
print(liste[[1]])
print(liste[[2]])
print(liste[[3]])
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Subset in R
Hallo kingerde,
willkommen im Forum!
Eigentlich möchtest Du das doch bestimmt für jedes Unternehmen machen, richtig?
Also (ich nehme mal die Beispieldaten von Bernhard, danke):
willkommen im Forum!
Eigentlich möchtest Du das doch bestimmt für jedes Unternehmen machen, richtig?
Also (ich nehme mal die Beispieldaten von Bernhard, danke):
Code: Alles auswählen
bsp <- data.frame(name = rep(c("ADAC", "Allianz", "BASF"), each = 5),
jahr = rep(2015:2019),
wert = round(runif(15, 0, 1000),2))
L <- split(bsp, bsp$name)
myfun <- function(einUnternehmen) {
## mach irgendwas mit einUnternehmen$jahr und einUnternehmen$wert ...
return(...)
}
lapply(L, FUN=myfun) ### oder auch sapply(...)
Re: Subset in R
bigben hat geschrieben: Do Jun 03, 2021 10:34 pm Hallo kingerde,
ich denke es war verständlich, ich denke aber nicht, dass es eine gute Idee ist. Wenn Du uns erzählst, was Du im weiteren Verlauf mit den Daten machen willst, dann können wir wahrscheinlich eine bessere Lösung anbieten.
Aber das hier geht auch:
Die ersten vier Zeilen sind nur zum Erstellen und Darstellen eines Datenbeispiels. Die letzte Zeile zerteilt den Dataframe in Stücke mit lauter gleichen Firmennamen und Du bekommst dann eine Liste dieser Dataframes zurück:Code: Alles auswählen
bsp <- data.frame(name = rep(c("ADAC", "Allianz", "BASF"), each = 5), jahr = rep(2015:2019), wert = round(runif(15, 0, 1000),2)) print(bsp) # so sehen meine Beispieldaten aus lapply(unique(bsp$name), \(n) subset(bsp, name == n))
Das läuft so nur in der neuesten R-Version, dürfte aber die gestellte Frage beantworten. Wie gesagt, es hilft wahrscheinlich, wenn Du uns das große Bild beschreibst. Siehe auch: https://de.wikipedia.org/wiki/XY-ProblemCode: Alles auswählen
liste <- lapply(unique(bsp$name), \(n) subset(bsp, name == n)) print(liste[[1]]) print(liste[[2]]) print(liste[[3]])
LG,
Bernhard
Danke für die schnelle Hilfe. Ich werde später mal dran arbeiten.
Ich schreibe eine Abschlussarbeit in der Uni. Meine empirische Untersuchung basiert auf zwei Modelle. Die Modelle basieren auf eine Zeitreihen Regressionsanalyse.
In der ersten Untersuchung führe ich eine ganz normale Regression durch.
In der zweiten Untersuchung eine Trend Regression, wobei ich die Residuen der Regression für eine spätere Regression benötige.
So wie ich es in den Studien verstanden habe, wurde in den Modellen die Regression auch für jedes Unternehmen die Regression durchgeführt - daher müsste ich meinen Datensatz in Unternehmen aufteilen.
Mit einer Paneldatenregression würde ich in der zweiten Untersuchung wahrscheinlich nicht weit kommen, aber da kenne ich mich Stand jetzt nicht gut genug mit R aus.
Re: Subset in R
Genau, ich möchte das für jedes Unternehmen machen. Auch danke dir für die Antwort. Das wird mir bestimmt schon deutlich helfen.jogo hat geschrieben: Fr Jun 04, 2021 9:05 am Hallo kingerde,
willkommen im Forum!
Eigentlich möchtest Du das doch bestimmt für jedes Unternehmen machen, richtig?
Also (ich nehme mal die Beispieldaten von Bernhard, danke):Code: Alles auswählen
bsp <- data.frame(name = rep(c("ADAC", "Allianz", "BASF"), each = 5), jahr = rep(2015:2019), wert = round(runif(15, 0, 1000),2)) L <- split(bsp, bsp$name) myfun <- function(einUnternehmen) { ## mach irgendwas mit einUnternehmen$jahr und einUnternehmen$wert ... return(...) } lapply(L, FUN=myfun) ### oder auch sapply(...)
Re: Subset in R
Hallo kingerde,
Jörgs split() ist nochmal eleganter als meine selbstgeschriebene Lösung.
Wenn ich jetzt für jede der Firmen eine lineare Regression (Wert in Abhängigkeit der Jahreszahl) durchführen möchte, dann kann ich alle diese Regressionen mit einem Befehl machen, ohne den Datensatz vorher in lauter Teildatensätze aufspalten zu müssen.
Könnte so aussehen:
Diese eine Zeile führt in dem Beispiel zu drei linearen Regressionen, für jede Firma eine.
Du kannst das natürlich machen wie Du willst, ich wollte nur erwähnt haben, dass der Gedanke, Du *müsstest* da was aufteilen so nicht stimmt. R versteht auch komplexe Anweisungen wie "mach für jede Firma in diesem Dataframe eine eigene Regression".
Viel Spaß beim R lernen,
Bernhard
Jörgs split() ist nochmal eleganter als meine selbstgeschriebene Lösung.
Genau diese Annahme ist nicht unbedingt der beste Weg in R. Nehmen wir nochmal meinen Beispieldatensatz von oben:So wie ich es in den Studien verstanden habe, wurde in den Modellen die Regression auch für jedes Unternehmen die Regression durchgeführt - daher müsste ich meinen Datensatz in Unternehmen aufteilen.
Code: Alles auswählen
bsp <- data.frame(name = rep(c("ADAC", "Allianz", "BASF"), each = 5),
jahr = rep(2015:2019),
wert = round(runif(15, 0, 1000),2))
print(bsp) # so sehen meine Beispieldaten aus
Könnte so aussehen:
Code: Alles auswählen
by(bsp, INDICES = bsp$name, function(n) summary(lm(wert ~ jahr, data = n)))
Du kannst das natürlich machen wie Du willst, ich wollte nur erwähnt haben, dass der Gedanke, Du *müsstest* da was aufteilen so nicht stimmt. R versteht auch komplexe Anweisungen wie "mach für jede Firma in diesem Dataframe eine eigene Regression".
Viel Spaß beim R lernen,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Subset in R
Hallo Bernhard,bigben hat geschrieben: Fr Jun 04, 2021 2:49 pm Hallo kingerde,
Jörgs split() ist nochmal eleganter als meine selbstgeschriebene Lösung.
Genau diese Annahme ist nicht unbedingt der beste Weg in R. Nehmen wir nochmal meinen Beispieldatensatz von oben:So wie ich es in den Studien verstanden habe, wurde in den Modellen die Regression auch für jedes Unternehmen die Regression durchgeführt - daher müsste ich meinen Datensatz in Unternehmen aufteilen.
Wenn ich jetzt für jede der Firmen eine lineare Regression (Wert in Abhängigkeit der Jahreszahl) durchführen möchte, dann kann ich alle diese Regressionen mit einem Befehl machen, ohne den Datensatz vorher in lauter Teildatensätze aufspalten zu müssen.Code: Alles auswählen
bsp <- data.frame(name = rep(c("ADAC", "Allianz", "BASF"), each = 5), jahr = rep(2015:2019), wert = round(runif(15, 0, 1000),2)) print(bsp) # so sehen meine Beispieldaten aus
Könnte so aussehen:
Diese eine Zeile führt in dem Beispiel zu drei linearen Regressionen, für jede Firma eine.Code: Alles auswählen
by(bsp, INDICES = bsp$name, function(n) summary(lm(wert ~ jahr, data = n)))
Du kannst das natürlich machen wie Du willst, ich wollte nur erwähnt haben, dass der Gedanke, Du *müsstest* da was aufteilen so nicht stimmt. R versteht auch komplexe Anweisungen wie "mach für jede Firma in diesem Dataframe eine eigene Regression".
Viel Spaß beim R lernen,
Bernhard
das erspart mir sehr viel Arbeit. Ganz großes Danke!
Schönes Wochenende
Re: Subset in R
bigben hat geschrieben: Fr Jun 04, 2021 2:49 pm Hallo kingerde,
Jörgs split() ist nochmal eleganter als meine selbstgeschriebene Lösung.
Genau diese Annahme ist nicht unbedingt der beste Weg in R. Nehmen wir nochmal meinen Beispieldatensatz von oben:So wie ich es in den Studien verstanden habe, wurde in den Modellen die Regression auch für jedes Unternehmen die Regression durchgeführt - daher müsste ich meinen Datensatz in Unternehmen aufteilen.
Wenn ich jetzt für jede der Firmen eine lineare Regression (Wert in Abhängigkeit der Jahreszahl) durchführen möchte, dann kann ich alle diese Regressionen mit einem Befehl machen, ohne den Datensatz vorher in lauter Teildatensätze aufspalten zu müssen.Code: Alles auswählen
bsp <- data.frame(name = rep(c("ADAC", "Allianz", "BASF"), each = 5), jahr = rep(2015:2019), wert = round(runif(15, 0, 1000),2)) print(bsp) # so sehen meine Beispieldaten aus
Könnte so aussehen:
Diese eine Zeile führt in dem Beispiel zu drei linearen Regressionen, für jede Firma eine.Code: Alles auswählen
by(bsp, INDICES = bsp$name, function(n) summary(lm(wert ~ jahr, data = n)))
Du kannst das natürlich machen wie Du willst, ich wollte nur erwähnt haben, dass der Gedanke, Du *müsstest* da was aufteilen so nicht stimmt. R versteht auch komplexe Anweisungen wie "mach für jede Firma in diesem Dataframe eine eigene Regression".
Viel Spaß beim R lernen,
Bernhard
Hallo Bernhard,
ich hätte noch eine Frage. Ist es mit der Methode möglich die ermittelten Residuen als neue Spalte im Datensatz hinzuzufügen?
Danke.
LG
Re: Subset in R
doch, doch:
LG,
Bernhard
Code: Alles auswählen
bsp <- data.frame(name = rep(c("ADAC", "Allianz", "BASF"), each = 5),
jahr = rep(2015:2019),
wert = round(runif(15, 0, 1000),2))
bsp$residuen <- unlist(by(bsp, INDICES = bsp$name, function(n) lm(wert ~ jahr, data = n)$residuals))
print(bsp)
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Subset in R
Moin Bernhard,bigben hat geschrieben: Fr Jun 04, 2021 2:49 pm Hallo kingerde,
Jörgs split() ist nochmal eleganter als meine selbstgeschriebene Lösung.
Genau diese Annahme ist nicht unbedingt der beste Weg in R. Nehmen wir nochmal meinen Beispieldatensatz von oben:So wie ich es in den Studien verstanden habe, wurde in den Modellen die Regression auch für jedes Unternehmen die Regression durchgeführt - daher müsste ich meinen Datensatz in Unternehmen aufteilen.
Wenn ich jetzt für jede der Firmen eine lineare Regression (Wert in Abhängigkeit der Jahreszahl) durchführen möchte, dann kann ich alle diese Regressionen mit einem Befehl machen, ohne den Datensatz vorher in lauter Teildatensätze aufspalten zu müssen.Code: Alles auswählen
bsp <- data.frame(name = rep(c("ADAC", "Allianz", "BASF"), each = 5), jahr = rep(2015:2019), wert = round(runif(15, 0, 1000),2)) print(bsp) # so sehen meine Beispieldaten aus
Könnte so aussehen:
Diese eine Zeile führt in dem Beispiel zu drei linearen Regressionen, für jede Firma eine.Code: Alles auswählen
by(bsp, INDICES = bsp$name, function(n) summary(lm(wert ~ jahr, data = n)))
Du kannst das natürlich machen wie Du willst, ich wollte nur erwähnt haben, dass der Gedanke, Du *müsstest* da was aufteilen so nicht stimmt. R versteht auch komplexe Anweisungen wie "mach für jede Firma in diesem Dataframe eine eigene Regression".
Viel Spaß beim R lernen,
Bernhard
ich habe auch mal eine Frage und die passt hier ganz gut rein. Meine Datensatz ist ungefähr ähnlich wie der von KingErde. Ich benutze für meine Regression folgenden Code
Code: Alles auswählen
library(lme4)
library(broom)
library(purrr)
library(gt)
mods <- lme4::lmList(Reaction ~ Days | Subject, sleepstudy)