R: ifelse-Funktion gibt Vektorposition statt Wert (String) zurück

8

Ich habe ein sehr merkwürdiges Problem in Bezug auf die ifelse-Funktion: Es gibt keinen Faktor zurück (wie ich will), sondern etwas wie die Position des Faktors.

Der Datensatz, den ich verwende, kann hier heruntergeladen werden.

Was ich will

.. ist eine neue Spalte in df, die den Namen des Landes enthält, wenn dieses Land zu den Top 12 der häufigsten Länder gehört (in der Spalte "Antwort"). Sonst sollte es "Andere" enthalten

Was ich gemacht habe

... ist

  • Erstellen Sie eine Liste mit den häufigsten Ländernamen unter Verwendung von as.data.frame (Zusammenfassung .. etc) ## das funktioniert
  • Der TRUE-Teil der Funktion vergleicht den df $ col-Wert mit dieser Liste mit% in% ## das funktioniert auch
  • Gibt den Wert zurück, wenn TRUE der Faktor (ein Ländername) in diesem
  • sein sollte

Allerdings

... R gibt etwas wirklich Merkwürdiges zurück: Es gibt die Position der Faktorstufe (zwischen 1 und 181) für die Top 10 Länder und "Andere" für die anderen zurück (was in Ordnung ist). Es ist diese Zeile, die den falschen Wert zurückgibt:

%Vor%

Der Code, den ich benutzt habe:

%Vor%

PS. Dies ist eine Follow-up-Frage zu dieses , weil es etwas anders ist, und vielleicht eine separate Frage brauchen.

    
Thieme Hennis 06.02.2014, 13:35
quelle

3 Antworten

12

Das Feld answer ist Faktor, daher gibt Ihre Funktion die Zahl (Faktorstufe) zurück.

Was Sie tun müssen, ist:

%Vor%

und dann funktioniert es.

    
Zbynek 06.02.2014, 13:42
quelle
3

Das liegt daran, dass Sie einen Faktor haben:

%Vor%

Lesen Sie die Warnung in help("ifelse") :

  

Der Modus des Ergebnisses kann vom Wert des Tests abhängen (siehe   Beispiele), und das Klassenattribut (siehe oldClass) des Ergebnisses ist   aus dem Test genommen und kann für die ausgewählten Werte ungeeignet sein   Ja und Nein.

     

Manchmal ist es besser, eine Konstruktion wie

zu verwenden      

(tmp & lt; - ja; tmp [! Test] & lt; - nein [! Test]; tmp), möglicherweise erweitert auf   behandeln fehlende Werte im Test.

    
Roland 06.02.2014 13:43
quelle
0

Ändern Sie Ihre ifelse wie folgt

%Vor%

Beachten Sie die Funktion levels und die Boxklammern. Levels weiß, wie viele Faktoren ihr und ihr Index sind. Also, was wir sagen, ist der Faktorwert, der einem Indexwert entspricht.

Beispieldemo:

%Vor%

Die Spalte top in myData wird "Andere" für China & amp; Brasilien. Für Reihen, in denen Allcountries in {India, USA, UK} angegeben ist, werden die entsprechenden Werte zurückgegeben, d. H. {India, USA, UK}. Ohne die Verwendung von levels gibt es "Andere" und Faktorindexwerte für {Indien, USA, UK} zurück.

    
user1509107 06.02.2014 13:49
quelle

Tags und Links