Seite 2 von 2

Re: R Filterfunktion

Verfasst: Do Mär 14, 2019 2:23 pm
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 :-)

Re: R Filterfunktion

Verfasst: Do Mär 14, 2019 2:26 pm
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

Re: R Filterfunktion

Verfasst: Do Mär 14, 2019 3:03 pm
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

Re: R Filterfunktion

Verfasst: Do Mär 14, 2019 3:14 pm
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)

Re: R Filterfunktion

Verfasst: Do Mär 14, 2019 5:56 pm
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.

Re: R Filterfunktion

Verfasst: Do Mär 14, 2019 6:06 pm
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!