2017-04-06 19 views
1

Ich habe zwei Datenrahmen mit der gleichen Anzahl von Zeilen und Spalten, 113x159 mit dieser Struktur:Vergleichen Sie Werte von zwei Datenrahmen und ersetzen sie

df1:

1 2 3 4 
a AT AA AG CT 
b NA AG AT CC 
c AG GG GT AA 
d NA NA TT TC 

df2:

1 2 3 4 
a NA 23 12 NA 
b NA 23 44 12 
c 11 14 27 55 
d NA NA 12 34 

Ich möchte Wert zu Wert db1 e db2 vergleichen, und wenn der Wert von db 2 ist NA und der Wert von db1 nicht ist, ersetzen Sie es (auch wenn db1 Wert ist NA und in db2 nicht). Am Ende hat mein df dies sein: Das

1 2 3 4 
a NA AA AG NA 
b NA AG AT CC 
c AG GG GT AA 
d NA NA TT CC 

Ich habe geschrieben, wenn Schleife, aber es nicht funktioniert:

Jede Idee
merge.na<-function(x){ 
for (i in df2) AND (k in df1){ 
    if (i==NA) AND (k!=NA) 
    k==NA} 

?

+1

Sie nicht 'tun können == NA'. Verwenden Sie 'is.na()' –

+1

'is.na (df1) <- is.na (df2)' –

+0

@docendodiscimus besser sicher, es funktioniert sehr gut. Ich sehe, dass es sich auf der DF1 überschneidet, aber glücklicherweise habe ich eine Kopie. Vielen Dank! – mppd

Antwort

0

Wir replace verwenden

replace(df1, is.na(df2), NA) 
# X1 X2 X3 X4 
#a <NA> AA AG <NA> 
#b <NA> AG AT CC 
#c AG GG GT AA 
#d <NA> <NA> TT TC 
Verwandte Themen