2016-09-02 2 views
0

ich einen Datenrahmen df1 haben, die wie folgt aussieht:data.frame Spalte mit IDs mit Spalte mit den entsprechenden Namen aus einer anderen data.frame genommen Ersetzen

id   name  type           
46  hsa:4052 gene 
50  hsa:7057 gene 
52  hsa:8454 gene 

Und dann habe ich einen zweiten Datenrahmen df2, das aussieht dies wie:

entry1 entry2  type  name  value 
46   44  PPrel  activation --> 
52   50  PPrel  activation --> 
29   27  PPrel  activation --> 

Nun sind die gemeinsamen Spalten in den beiden Datenrahmen-ID von df1 und entry1 und entry2 von df2. Was ich möchte, dass meine Ergebnisse aussehen, ist dies:

entry1 entry2  type  name  value 
hsa:4052 44  PPrel  activation --> 
hsa:8454 hsa:7057 PPrel  activation --> 
29   27  PPrel  activation --> 

i Also, was im Grunde wollen, ist die entry1 und entry2id s in df2 mit den Namen der entsprechenden IDs von df1 ersetzen. Ich versuchte Merge, aber offensichtlich Merge hilft hier nicht. Irgendeine Hilfe?

+1

Merge funktioniert, wir haben nur zweimal fusionieren müssen, einmal auf entry1, dann auf entry2. – zx8754

Antwort

2

Versuchen Sie folgendes:

df2[,1:2]<-lapply(df2[,1:2], 
      function(x) ifelse(x %in% df1$id,df1$name[match(x,df1$id)],x)) 
# entry1 entry2 type  name value 
#1 hsa:4052  44 PPrel activation --> 
#2 hsa:8454 hsa:7057 PPrel activation --> 
#3  29  27 PPrel activation --> 
+0

Es tut mir leid @nicola, aber es funktioniert nicht, die Werte von entry1 und entry2 in df2 sind geändert, sind aber nicht die Namen von df1 –

+1

Stellen Sie sicher, dass df1 $ name as.character() festgelegt ist, dh versuchen Sie: df1 $ name < -as.character (df1 $ name) – nadizan

Verwandte Themen