2012-11-08 4 views
10

ich zwei Frames große Daten bekam, ein (df1) hat diese Strukturmehrere Spalten auf verschiedenen Datenrahmen Passende und andere Spalte als Ergebnis bekommen

chr init 
1 12 25289552 
2 3 180418785 
3 3 180434779 

Die andere (df2) hat dieses

V1 V2  V3 
10 1  69094 medium 
11 1  69094 medium 
12 12 25289552 high 
13 1  69095 medium 
14 3 180418785 medium 
15 3 180434779 low 

Was ich versuche, ist die Spalte V3 von df2 zu df1 hinzufügen, um die Informationen der Mutation

zu erhalten

Ich versuche, beide in R und dann eine for-Schleife mit Match, aber es funktioniert nicht. Kennst du einen speziellen Weg, dies zu tun? Ich bin auch offen zu tun mit awk oder etwas ähnliches

Antwort

12

Verwenden merge

df1 <- read.table(text=' chr init 
1 12 25289552 
2 3 180418785 
3 3 180434779', header=TRUE) 


df2 <- read.table(text=' V1 V2  V3 
10 1  69094 medium 
11 1  69094 medium 
12 12 25289552 high 
13 1  69095 medium 
14 3 180418785 medium 
15 3 180434779 low', header=TRUE) 


merge(df1, df2, by.x='init', by.y='V2') # this works! 
     init chr V1  V3 
1 25289552 12 12 high 
2 180418785 3 3 medium 
3 180434779 3 3 low 

Um die gewünschte Ausgangs die Quere zeigen Sie es

output <- merge(df1, df2, by.x='init', by.y='V2')[, c(2,1,4)] 
colnames(output)[3] <- 'Mut' 
output 
    chr  init Mut 
1 12 25289552 high 
2 3 180418785 medium 
3 3 180434779 low 
+0

Ja, das ist, was ich will, ist der Punkt, dass ich zu berücksichtigen, haben die Chromosom auch, also vielleicht so etwas verschmelzen (df1, df2, by.x = c ('chr', 'init'), by.y = c ('V1', V2 ') [, c (2,1, 4)] – user976991

+0

Genau, wenn man 'chr' und' V1' zu den Argumenten hinzufügt, werden sie berücksichtigt: D Betrachte upv Geben Sie die nützlichen Antworten ein und akzeptieren Sie eine davon, wenn Sie sie nützlich finden: D –

0

Hat

df3 <- merge(df1, df2, by.x = "init", by.y = "V2") 
df3 <- df3[-3] 
colnames(df3)[3] <- "Mut" 

Ihnen, was Sie wollen?

2
df1 <- read.table(textConnection(" chr init 
1 12 25289552 
2 3 180418785 
3 3 180434779"), header=T) 

df2 <- read.table(textConnection(" V1 V2  V3 
10 1  69094 medium 
11 1  69094 medium 
12 12 25289552 high 
13 1  69095 medium 
14 3 180418785 medium 
15 3 180434779 low"), header=T) 

# You have to select the values of df2$V3 such as their corresponding V2 
# are equal to the values of df1$init 
df1$Mut <- df2$V3[ df2$V2 %in% df1$init] 

df1 
    chr  init Mut 
1 12 25289552 high 
2 3 180418785 medium 
3 3 180434779 low 
+0

Beachten Sie, dass dies nicht funktioniert, wenn in 'df1' Schlüsselwerte vorhanden sind, die in' df2' fehlen. Sie erhalten einen Fehler wie "Ersatz hat 3 Zeilen, Daten hat 4". Siehe http://stackoverflow.com/questions/1299871/how-to-join-merge-data-frames-inner-outer-left-right/38130460#38130460 für eine linke Join-Implementierung mit 'match()'. – bgoldst