R Filterfunktion

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

Moderatoren: EDi, jogo

Maya
Beiträge: 6
Registriert: Mi Mär 13, 2019 6:34 pm

Re: R Filterfunktion

Beitrag von Maya »

Juhuuuu,

es hat endlich geklappt :-) Tausend Dank.

Ich habe jetzt folgenden Code verwendet

Code: Alles auswählen

subset(Students,(parental.level.of.education == "high school" | parental.level.of.education == "bachelor's degree") & race.ethnicity == "group C")
Eine frage habe noch: Kann ich diesen Code jetzt noch in einer neuen Tabelle irgendwie abspeichern? Zuvor hatte ich folgenden Code verwendet:

Students.neu <- Students %>%

bekommt man das irgendwie auch so hin?

Code: Alles auswählen

Students.neu <- Students %>% 
subset(Students,(parental.level.of.education == "high school" | parental.level.of.education == "bachelor's degree") & race.ethnicity == "group C")
Tausend Dank nochmal :-)
bigben
Beiträge: 2777
Registriert: Mi Okt 12, 2016 9:09 am

Re: R Filterfunktion

Beitrag von bigben »

Einfach so, wie ich es in meinem Code bereits vorgemacht habe :?:

Code: Alles auswählen

Students.neu <- subset(...)
Dieser komische Operator %>% gehört nicht zum ursprünglichen R. Er ist nachträglich draufgeflanscht in der Hoffnung, Code einfacher lesbar zu gestalten. Gegenwärtig scheint er Dich mehr zu verwirren, als Dir zu helfen.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Maya
Beiträge: 6
Registriert: Mi Mär 13, 2019 6:34 pm

Re: R Filterfunktion

Beitrag von Maya »

Großartig Bernhard,

es klappt wie es nun soll. Ich würde gerne in der Tabelle noch eine Anpassung vornehmen. Und zwar in der Spalte "test.preparation.course". Dort würde ich gerne bei "none" druch eine 0 ersetzen und bei "completed" eine 1. Muss ich dazu eine neue Spalte bauen oder kann man das in R direkt umformen?
Ich bin jetzt schon super glücklich :)

Beste Grüße

Maya
bigben
Beiträge: 2777
Registriert: Mi Okt 12, 2016 9:09 am

Re: R Filterfunktion

Beitrag von bigben »

Hallo Maya,

darf ich fragen, warum Du so eine komische Umkodierung vornehmen möchtest? Ich nehmen an, dass Du test.preparation.course gerne dummycodieren möchtest, um das in einer linearen Regression zu verwenden. Das wäre in anderen Computerprogrammen vielleicht ein sinnvoller Ansatz, ist aber in R nicht erforderlich. Du kann test.preparation.course einfach so wie es ist (als "factor") in die Regression einbringen und R kümmert sich dann um die Dummycodierung selbst.

Du kannst beispielsweise den writing.score aus dem reading.score und dem test.preparation.course vorhersagen:

Code: Alles auswählen

students <- read.csv("http://forum.r-statistik.de/download/file.php?id=457")
summary(lm(writing.score ~ reading.score + test.preparation.course, 
           data= students))
Ergebnis:

Code: Alles auswählen

Call:
lm(formula = writing.score ~ reading.score + test.preparation.course, 
    data = students)

Residuals:
     Min       1Q   Median       3Q      Max 
-14.0906  -3.0140   0.0179   2.8745  13.0800 

Coefficients:
                             Estimate Std. Error t value Pr(>|t|)
(Intercept)                  2.625416   0.752812   3.487 0.000509
reading.score                0.971577   0.009702 100.139  < 2e-16
test.preparation.coursenone -2.763915   0.295330  -9.359  < 2e-16
                               
(Intercept)                 ***
reading.score               ***
test.preparation.coursenone ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 4.344 on 997 degrees of freedom
Multiple R-squared:  0.9184,	Adjusted R-squared:  0.9183 
F-statistic:  5612 on 2 and 997 DF,  p-value: < 2.2e-16
Du siehst: Wer keinen test.preparation.course gemacht hat, der hat 2,76 Punkte weniger im writing.score und das schon adjustiert nach reading.score.

Das kann man auch grafisch Darstellen, ohne irgendwas manuell umzucodieren:

Code: Alles auswählen

plot(students$reading.score, students$writing.score, col=students$test.preparation.course)
Sehr wahrscheinlich brauchst Du diese Umwandlung also nicht und sie bringt Dir eine zusätzliche Gelegenheit, Fehler zu machen.

LG,
Bernhard


PS: Wenn Du es trotzdem machen willst:

Code: Alles auswählen

students$vorbereitung <- ifelse(students$test.preparation.course == "none", 
                                yes = 0, no = 1)
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: R Filterfunktion

Beitrag von EDi »

Gegenwärtig scheint er Dich mehr zu verwirren, als Dir zu helfen.
Ohja, weil das

Code: Alles auswählen

Students %>% 
subset(Students,(parental.level.of.education == "high.... 
Löst sich auf zu

Code: Alles auswählen

subset(Students, Students,(parental.level.of.education == "high.... 
:?:

Entweder ganz tidyverse (mit pipes, und dplyr verben wie filter()) oder ganz base-r - ein mix ist meist eine Garantie für unübersichtlichen Code.
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.
Athomas
Beiträge: 769
Registriert: Mo Feb 26, 2018 8:19 pm

Re: R Filterfunktion

Beitrag von Athomas »

Dieser komische Operator %>% gehört nicht zum ursprünglichen R.
Ach - ein Operator :o !?

Ich dachte immer, das wäre ein Emoticon (große Verwirrung oder so), das die Leute aus Verzweiflung in ihren Programmen verteilen!
Antworten