2017-09-26 1 views
-1

ich folgendes haben dataframe- nennen es eineeine neue Spalte in R Datenrahmen basierend auf einer vorhandenen Spalte und einem Satz von Parametern

S.No Action Taken 
1 Advance Booking 
2 Before Launch 
3 After Launch 
4 Re Launch 
5 Customer care management 

ich auch die folgenden Datenrahmen - es Rufen B

Sl No Action Name 
1  Machine Re Launch 
2  New Machine Re Launch 
3  New Machine Relaunch 
4  New Device Launch 
5  New Device After Launch 
6  Customer Care Management' 
7  Machine After Launch 
8  New Machine After Launch 
9  New Machine Relaunch 
10  New Device After Launch 

wie eine Spalte im Datensatz B als folgt-

Sl No Action Name    Action Type 
1  Machine Re Launch   Re Launch 
2  New Machine Re Launch  Re Launch 
3  New Machine Relaunch  Re Launch 
4  New Device Launch   Launch 
5  New Device After Launch  After Launch 
6  Customer Care Management' Customer Care Management 
7  Machine After Launch  After Launch 
8  New Machine After Launch After Launch 
9  New Machine Relaunch  After Launch 
10  New Device After Launch After Launch 

erstellen wie kann ich dies zu erreichen. Es ähnelt einem Nachschlagen in Excel.

+2

Welcher Algorithmus ist für die Beschneidung von "Aktionsname" verantwortlich? Was hast du probiert? Erwägen Sie die Veröffentlichung eines [reproduzierbaren Beispiels] (https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). –

+0

Der Aktionsname wurde als Teil des Datenwörterbuchs bereitgestellt. Ich habe ihn nicht mit einem Code abgeleitet. Ich habe versucht, Strsplit, aber das hat zu begrenzten Ergebnissen geführt, wie in einigen Fällen die Schlüsselwörter aus dem Wörterbuch zwischen der Zeichenfolge kommen. Es sieht wie ein Lookup aus, aber ich habe bisher nur numerische Beispiele gefunden. Daher meine Anfrage –

Antwort

0

Liegt es an Rechtschreibfehlern in Ihrem Beispiel, dass der B-Datenrahmen es "Relaunch" buchstabiert, aber das A sagt "Re Launch"? Ich sehe nicht, wie Sie erwarten, dass die beiden ohne weitere Informationen zusammenpassen.

Unter der Annahme, es ein Fehler ist, können Sie so etwas tun könnten,

B$action_type <- "" 
for (i in A$action_taken) { 
    B$action_type <- ifelse(B$action_type == "", 
             ifelse(grepl(i, 
                B$action_name, 
                ignore.case = TRUE), 
              i, 
              ""), 
             B$action_type) 
} 

dies nur eine Iteration durch die Liste Aktionen genommen, um zu sehen, sieht, wenn er den Text in Aktion Namen findet, und wenn ja, dann gibt es das als den Aktionstyp aus (wenn nicht, lässt es leer und bewegt sich auf den nächsten String). Dies findet jedoch nur exakte Schreibweisen (Fall ignorieren), so dass "Relaunch" und "Re Launch" nicht übereinstimmen.

bearbeiten

neue Antwort Hinzufügen von unten aus dem Kommentar zu reflektieren.

Wenn Sie mit allen Versionen von "relaunch"/"re launch" usw. umgehen möchten, müssen Sie eine Nachschlagetabelle mit allen Variationen erstellen, die Sie erwarten, mit der entsprechenden korrekten "Action Taken" in einer zweiten Spalte.

So ist die A Datenrahmen hat nun beide Spalte action_text_variation und action_taken, wo action_text_variation alle Texte zu suchen hat, und action_taken hat den entsprechenden Text füllen „action_type“ wollen.

Jetzt iterieren wir durch die Anzahl der Zeilen in A.

B$action_type <- "" 
for (i in 1:nrow(A)) { 
    B$action_type <- ifelse(B$action_type == "", 
             ifelse(grepl(A$action_text_variation[i], 
                B$action_name, 
                ignore.case = TRUE), 
              A$action_taken[i], 
              ""), 
             B$action_type) 
} 

P. S. Es wäre viel einfacher, Ihnen zu helfen, wenn Sie ein reproduzierbares Beispiel bereitstellen, damit wir den Code selbst ausführen und Änderungen vorschlagen können.

+0

Danke. Es ist eigentlich kein Rechtschreibfehler, aber dann kann ich dasselbe mit den richtigen Versionen ersetzen. Ich wurde gebeten, Schleifen in R zu vermeiden, da sie problematisch sein können. –

+0

for loops kann sicherlich in R problematisch sein, aber ich denke, dass es am meisten vermieden werden kann, wenn Sie verstehen, warum sie ein Problem sind (wie das Anhängen der Ausgabe von einer for-Schleife zu einem Datenrahmen vermeiden). Aber sie sind nicht an sich schlecht und haben ihren Nutzen.Das heißt nicht, dass es keinen besseren Weg gibt, um das Problem zu lösen. Aber so würde ich es machen. Ich werde die ursprüngliche Antwort bearbeiten, um ein Problem widerzuspiegeln, bei dem Sie sowohl Relaunch als auch "Re Launch" behandeln können. –

+0

Sehr geehrter Herr. Danke. Und gibt es ein Tutorial/Ressource für Schleifen und Steueranweisungen. Ich habe die Grundlagen gelernt, bin aber mit größeren Loops stocked. –

Verwandte Themen