2017-10-05 4 views
0

Ich habe ein Problem mit der Auswahl einer Variablen, die einen bestimmten Wertebereich enthalten sollte. Ich möchte meine Variable in 3 Kategorien aufteilen. Nämlich; small, medium und big. Ein Stück Kontext. Ich habe eine Variable namens obj_hid_woonopp, die (Größe in m2) ist und es geht von 16-375. Und mein Datensatz heißt datalogitvar.Unterselektion einer Variablen

Es tut mir leid, ich habe keinen reproduzierbaren Code. Aber da ich denke, dass es eine ziemlich einfache Frage ist, hoffe ich, dass sie trotzdem beantwortet werden kann. Der Code, den ich verwende, ist wie folgt

datalogitvar$size_small<- as.numeric(obj_hid_WOONOPP>="15" & obj_hid_WOONOPP<="75") 
datalogitvar$size_medium<- as.numeric(obj_hid_WOONOPP>="76" & obj_hid_WOONOPP<="100") 
datalogitvar$size_large<- as.numeric(obj_hid_WOONOPP>="101") 

Wenn ich dies ausführen, bekomme ich ein Ergebnis. Nur nicht das Ergebnis, auf das ich hoffe. Zum Beispiel enthält die kleine Kategorie auch sehr hohe Zahlen. Es scheint, dass (da ich "75" definiere) es auch Werte von "175" nimmt, da es "75" enthält. Ich habe darüber nachgedacht und ich fühle, dass es meine Daten als Text und nicht als Zahlen liest. Aber ich sage as.numeric, also bin ich ein bisschen verwirrt. Kann mir jemand erklären, wie ich sicherstelle, dass ich diese 3 Variablen mit dem richtigen Bereich erstelle? Ich fühle, dass ich nah bin, aber das Ergebnis ist bisher nutzlos.

Vielen Dank für Ihre Hilfe.

+1

Warum werden Ihre Zahlen als Strings importiert? Das sollte das Problem sein, das Sie zuerst ansprechen sollten.Es ist schwierig, Ihnen ohne ein [Beispiel für reproduzierbare Beispiele] (https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) zu helfen, um zu sehen, was vor sich geht. Aber Sie führen nur 'as.numeric()' im Booleschen Vergleich, nicht die Zeichenwerte. – MrFlick

+0

Vereinbart mit @MrFlick kommt Ihr Problem von inkonsistent referenzierenden Zahlen als Zeichen und numerisch. Ihr Problem besteht darin, dass sie als Zeichen gespeichert werden. Wenn Sie also alles zu 'as.numeric' in' obj_hid_WOONOPP' ändern, sollten Sie gut gehen. – Mako212

+0

ich gerade verwendet> Länge (obj_hid_WOONOPP) [1] 90127 So scheint es in Ordnung zu sein. Das scheint das Problem nicht zu verursachen. – Thundersheep

Antwort

0

Für eine Frage wie diese können Sie Ihr Problem mit einem öffentlich verfügbaren Dataset wie mtcars replizieren.

Und in Bezug auf Ihren Code 1) müssen Sie den Datensatz für DATASET $ obj_hid_WOONOPP auf der rechten Seite des Codes benennen. 2) Warum verwenden Sie Anführungszeichen um Ihre numerischen Werte? Diese Anführungszeichen verhindern, dass die Zahlen als Zahlen behandelt werden. Sie werden stattdessen als Zeichenfolgenwerte behandelt.

Ich denke, dass Sie etwas wie den Code verwenden möchten, den ich unten geschrieben habe.

mtcars$mpg_small <- as.numeric(mtcars$mpg >= 15 & mtcars$mpg <= 20) 
mtcars$mpg_medium <- as.numeric(mtcars$mpg > 20 & mtcars$mpg <= 25) 
mtcars$mpg_large <- as.numeric(mtcars$mpg > 25) 
+0

Danke, das war in der Tat meine Schuld! Ich legte Zitate um meine Zahlen. So dumm. Ich habe meine Zeilen aus einem früheren Stück kopiert, wo ich Text zitiert habe. Vielen Dank für den Tipp. Ich habe auch meine Daten angehängt, so dass ich die Datenmenge $ Variable nicht verwenden musste, aber danke auch für diesen Tipp. Es ist besser, es so zu schreiben, wie Sie es vorgeschlagen haben. – Thundersheep

0

einfach Ihr Problem zu veranschaulichen:

a <- "75" 
b <- "175" 

a > b 

TRUE (75 > 175) 

a < b 
FALSE (75 < 175) 

Strings nicht zu vergleichen, wie man es erwarten würde, sie zu.

+0

Danke Ich habe es gerade herausgefunden. Löschen der "" funktioniert. Danke auch! – Thundersheep

0

Zwei Ideen kommen in den Sinn, obwohl ein Beispiel für Code hilfreich wäre.

Schauen Sie zuerst in die Dokumentation für cut(), die verwendet werden kann, um numerische Vektoren in Faktoren basierend auf Schnittpunkten zu konvertieren, die Sie festlegen. Boolesche Vergleiche durchführen wie > oder &

Zweitens, wie @MrFlick weist darauf hin, könnte der Code neu geschrieben werden, so dass as.numeric() auf ein Zeichen Vektor ausgeführt wird, enthält Zeichenfolgen, die Sie anschließend in numerische Werte konvertiert werden soll.

auf @ Joe

mtcars$mpg_small <- (as.numeric(mtcars$mpg) >= 15 & 
        (as.numeric(mtcars$mpg) <= 20)) 

auch vorsichtig sein, zu bauen, wenn Ihr Vektor von Strings obj_hid_WOONOPP einige Werte enthält, die nicht in Numerik dazu gezwungen werden können, werden sie NA werden.

+0

Danke Ich habe es gerade herausgefunden. Löschen der "" funktioniert. Danke auch! – Thundersheep

Verwandte Themen