Datenaufbereitung

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

Moderatoren: EDi, jogo

Antworten
Tom
Beiträge: 20
Registriert: Mi Nov 13, 2019 4:21 pm

Datenaufbereitung

Beitrag von Tom »

Hallo zusammen,

ich möchte, dass R mir unter folgenden Bedingungen die Spalte "Bin" des Datensatzes "df" (s. Anhang) wie folgt ausfüllt:

Wenn Variable RT zwischen 0.400-0.500 liegt, dann soll Bin = 1 sein
Wenn Variable RT zwischen 0.500-0.600 liegt, dann soll Bin = 2 sein
Wenn Variable RT zwischen 0.600-0.700 liegt, dann soll Bin = 3 sein

Weiß jemand eine Lösung, wie man das möglichst effizient machen kann?

Danke Euch schonmal im Voraus.

LG
Tom
Dateianhänge
df.txt
(246 Bytes) 95-mal heruntergeladen
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Datenaufbereitung

Beitrag von bigben »

Hallo Tom,

ich habe eine ganze Reihe möglicher Lösungsansätze für dieses und ähnliche Probleme hier zusammengetragen: http://forum.r-statistik.de/viewtopic.php?t=2162

In Deinem Fall könnte das hier gut funktionieren:

Code: Alles auswählen

Df <- read.table(header = TRUE, 
                 text = "VP	Antwort	a	RT	Bin	v
                       12	1	standard	0.678	NA	v_52
                       12	1	standard	0.467	NA	v_52
                       12	0	standard	0.404	NA	v_52
                       12	1	standard	0.418	NA	v_52
                       12	1	standard	0.679	NA	v_52
                       12	1	standard	0.686	NA	v_52
                       12	1	standard	0.692	NA	v_52
                       12	1	standard	0.492	NA	v_52")
str(Df)

Df$Bin <- cut(x = Df$RT,
              breaks = c(.4, .5, .6, .7), labels = c(1, 2, 3)) |>
          as.character() |> as.integer()
print(Df)

oder noch etwas verkürzt:

Code: Alles auswählen

Df$Bin2 <- cut(x = Df$RT, breaks = c(.4, .5, .6, .7)) |> as.integer()
Effizienz sollte eigentlich unkritisch sein, wenn Du nicht gerade viele Milliarden Zeilen in Deinem Datensatz hast. Und selbst dann...
Schau Dir aber gerne auch den oben verlinkten Thread an -- die Frage stellt sich bei der Datenverarbeitung häufig und daher gibt es weit mehr als nur eine gute Antwort darauf.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Tom
Beiträge: 20
Registriert: Mi Nov 13, 2019 4:21 pm

Re: Datenaufbereitung

Beitrag von Tom »

Hallo Bernhard,

vielen Dank für deine Hilfe, ich erhalte allerdings folgende Fehlermeldung, wenn ich deinen Code verwende:

df$Bin <- cut(x = df$RT,
+ breaks = c(.4, .5, .6, .7), labels = c(1, 2, 3)) | >
Fehler: Unerwartete(s) '>' in:
"df$Bin <- cut(x = df$RT,
breaks = c(.4, .5, .6, .7), labels = c(1, 2, 3)) | >"
> as.character() | > as.integer()
Fehler: Unerwartete(s) '>' in " as.character() | >"

Hast du vielleicht eine Idee, woran das liegen könnte?

LG
Tom
Benutzeravatar
student
Beiträge: 674
Registriert: Fr Okt 07, 2016 9:52 am

Re: Datenaufbereitung

Beitrag von student »

Hallo Tom,

nur mal ganz schnell:

Code: Alles auswählen

bigben: |>     Du: | >
Das Leerzeichen macht den Unterschied!
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)
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Datenaufbereitung

Beitrag von bigben »

Hallo Tom,

so ganz einfach kann ich das jetzt nicht aufklären. Mein erster Verdacht wäre, dass es an der R-Version liegt. Um das untersuchen machen wir zwei Dinge:

Zum einen poste bitte mal das Ergebnis von

Code: Alles auswählen

sessionInfo()$R.version$version.string
Zum anderen probier bitte mal diese Umschrift meiner Kurzversion aus:

Code: Alles auswählen

Df <- read.table("http://forum.r-statistik.de/download/file.php?id=1619", header = TRUE) 
                 
Df$Bin <- as.integer(cut(x = Df$RT, breaks = c(.4, .5, .6, .7)))

print(Df)
LG,
Bernhard


PS: Deine Regel behandelt keine Fälle von RT die kleiner als 0,4 und keine die größer als 0,7 sind. Kommen solche Fälle verlässlich nicht vor, oder müssen wir uns da Gedanken drum machen? Außerdem machen Deine Regeln nicht klar, ob ein Wert von genau 0,50000 jetzt in Bin = 1 oder in Bin = 2 fällt. Ist das unkritisch oder muss das definiert werden?
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Antworten