Seite 1 von 1

Datenaufbereitung

Verfasst: So Nov 28, 2021 11:54 am
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

Re: Datenaufbereitung

Verfasst: So Nov 28, 2021 6:57 pm
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

Re: Datenaufbereitung

Verfasst: So Nov 28, 2021 8:10 pm
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

Re: Datenaufbereitung

Verfasst: Mo Nov 29, 2021 9:50 am
von student
Hallo Tom,

nur mal ganz schnell:

Code: Alles auswählen

bigben: |>     Du: | >
Das Leerzeichen macht den Unterschied!

Re: Datenaufbereitung

Verfasst: Mo Nov 29, 2021 9:58 am
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?