2016-03-24 2 views
-2

Ich habe eine data.frameconvert Werte einer Spalte auf einem anderen Datenrahmen in R basierend

df1=data.frame(f=LETTERS[1:4],v=c(1:4)) 
    f v 
1 A 1 
2 B 2 
3 C 3 
4 D 4 

Die erste Spalte ist eine Liste von Faktoren, in denen ich einen anderen Datenrahmen haben, die diese Werte untergebracht ist, welche auch Faktoren

df2=data.frame(f=LETTERS[1:7],f2=letters[26:20]) 
    f f2 
1 A z 
2 B y 
3 C x 
4 D w 
5 E v 
6 F u 

ich frage mich, wie eine Funktion zu schreiben, so dass ich die Werte aus der ersten Spalte von DF1 ändern kann, was sie abbilden zu von DF2. Ich möchte:

f v 
1 z 1 
2 y 2 
3 x 3 
4 w 4 

Ich versuchte eine for-Schleife ohne Erfolg. Ant Vorschläge wird sehr geschätzt

Hinweis: Dies ist ein vereinfachtes Beispiel meiner Arbeit. Eine Zusammenführung würde zu viele Spalten hinzufügen, mit zu arbeiten, und ich glaube nicht, der zusätzliche Speicher würde

+0

@ A.Webb wenn ich eine Zusammenführung verwendet, mein dfs riesig gewesen wäre, dies ist nur eine Vereinfachung davon. – alex

+1

@alex merge würde gut funktionieren –

+1

Jede Art, wie Sie diese Frage einrahmen, wurde hier Dutzende und Dutzende Male gefragt und beantwortet. –

Antwort

1

sehr nützlich seine Wir match

df1$f <- df2$f2[match(df1$f, df2$f)] 
df1 
# f v 
#1 z 1 
#2 y 2 
#3 x 3 
#4 w 4 
+1

das prächtig funktioniert hat. Vielen Dank. Ich weiß jetzt über Übereinstimmung – alex

0
library(dplyr) 
left_join(df1,df2) 
1

Sie merge

merge(df1,df2,by = "f")[,c(1,3,2)] 
    f f2 v 
1 A z 1 
2 B y 2 
3 C x 3 
4 D w 4 
verwenden können, verwenden können
0

Sie könnten versuchen, die merge Funktion zu verwenden, um die zwei Tabellen zusammenzuführen, und dann angeben, welche Spalten Sie behalten möchten.

Zum Beispiel:

df1 <- data.frame(f=LETTERS[1:4],v=c(1:4)) 
df2 <- data.frame(f=LETTERS[1:7],f2=letters[26:20]) 

merge(df1, df2, by.x = "f")[,c("f2", "v")] 

    f2 v 
1 z 1 
2 y 2 
3 x 3 
4 w 4