2016-08-09 8 views
-1

Ich versuche, die Zusammenführungsfunktion in R zu verwenden. Ich habe eine Liste von Spaltennamen (Stock-Namen) in einem Datenrahmen D. I dann haben Sie einen anderen Datenrahmen 'Info', wo diese Bestandsnamen in einer Spalte gespeichert werden, mit einem entsprechenden Sektornamen in der nächsten Spalte. Ich muss diese Sektornamen zu einer Zeile in D zusammenführen.R merge() nach Spaltennamen in einem Datenrahmen und eine Spalte in den anderen

Wenn ich auf 2 Spalten zusammenführen würde, könnte ich merge() direkt verwenden und by.x und by.y ändern und die emrged-Werte würden als zusätzliche Spalten angezeigt . Allerdings hat D den Namen, den ich zusammenfüge, als Spaltennamen, also möchte ich, dass es zusätzliche Zeilen hinzufügt? Der folgende Code hat nicht funktioniert:

P.S Ich habe auf SO gesucht, aber niemand hat genau dieses Problem. Sie haben ähnliche, aber diese Ansätze sind dafür nicht gültig.

+0

Fügen Sie ein kleines reproduzierbares Beispiel hinzu, das Ihr Problem darstellt. –

+1

Warum die Stimme runter? Sag es wenigstens, damit es in Zukunft korrigiert werden kann. – MathsQuant525

+1

Ich bin mir nicht sicher, warum es darüber eine Abstimmung gibt. Überprüfen Sie diesen Link [Wie man ein großartiges reproduzierbares Beispiel macht?] (Http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) –

Antwort

0

Aus Ihrer Beschreibung, sieht D wie

set.seed(1) 
D <- data.frame(matrix(runif(9), nc=3)) 
names(D) <- sample(LETTERS, 3) 

> D 
      B   F   E 
1 0.2655087 0.9082078 0.9446753 
2 0.3721239 0.2016819 0.6607978 
3 0.5728534 0.8983897 0.6291140 

Wo in diesem Beispiel B, F und E sind Aktien Namen. Vermutlich sieht info wie folgt aus:

info <- data.frame(NAME=LETTERS, sector=letters) 
> info 
    NAME sector 
1  A  a 
2  B  b 
3  C  c 
4  D  d 
5  E  e 
6  F  f 
7  G  g 
..snip.. 

Die Idee ist, das Recht sector von info zu extrahieren, dann rbind, die D Vektor. Beachten Sie, dass rbind den Namen der ersten und zweiten Objekte entspricht.

merged <- rbind(D, sapply(names(D), function(x) info$sector[info$NAME==x])) 
> merged 
      B   F   E 
1 0.2655087 0.9082078 0.9446753 
2 0.3721239 0.2016819 0.6607978 
3 0.5728534 0.8983897 0.6291140 
4 2.0000000 6.0000000 5.0000000 

sector (die ein Faktor-Typ wurde) wurde mit einem Schwimmer umgewandelt. Um das fusionierte Tisch schön aussehen zu lassen, könnten Sie

rbind(format(D), 
    as.character(
    sapply(names(D), function(x) info$sector[info$NAME==x]) 
) 
) 
      B   F   E 
1 0.2655087 0.9082078 0.9446753 
2 0.3721239 0.2016819 0.6607978 
3 0.5728534 0.8983897 0.6291140 
4   b   f   e 

tun Aber jetzt Ihre Zahlen sind wirklich Zeichen, die nicht sinnvoll sind oder nicht für Sie.

Verwandte Themen