2017-12-11 18 views
1

このタスクを実行する方法は非常に簡単ですが、わかりません。私はまったく同じデータを持っているが2つの別々の場所から2つのデータフレームを持っている。2つ目のデータフレームのNAに基づいて、1つのデータフレームの値をNAに変換する

df1 <- data.frame(a=c(1,2,3,NA),b=c(1,5,4,6)) 
df2 <- data.frame(a=c(3,4,5,6),b=c(7,8,9,NA)) 

マイ所望の出力が2ではまったく同じであるが、下の行のみNA値を含むDF1およびDF2の新しいバージョンを持っています。私。 NA値は、1つのデータフレームに存在する場合、私は他のデータフレームに対応するセル上に複製することを必要とする...

df1[4,2] <- NA 
df2[4,1] <- NA 

私は、例えば(反対の視点から問題に対処する非常によく似た質問を見てきましたFilling missing values in a data.frame from another data.frame )私は自分のデータにこれをどのように適用するのか分かりません。前もって感謝します。

答えて

3

我々は2つのデータセットのいずれかにNAの発生に基づいてインデックスを作成し、ここで

i1 <- NA^(is.na(df1)| is.na(df2)) 
df1 <- df1 * i1 
df2 <- df2 * i1 
+1

完璧にこれをありがとう。私はそれができるようになるとすぐにチェックします。 –

+0

興味深い。したがって、「NA^FALSE」== 1、「NA^TRUE」== NA。なぜこれが当てはまるのか知っていますか? –

+0

@EricWatt「NA^1」はNAであり、「NA^0」は1である。 – akrun

3

を掛けることができますが、いくつかの可能性があります。 (1)は、最もきれいで明確な意図であるようです。 (3)は機能するが、副作用を分類する点で不必要に複雑であるように思われる。

1)を試してください。replaceをお試しください。

df1new <- replace(df1, is.na(df2), NA) 
df2new <- replace(df2, is.na(df1), NA) 

これは、複雑さが増すもののdf1newdf2newdf1df2に置き換えた場合は動作し続けるであろう。その場合は、複雑さを避けるために、df1df2(つまりdf1 <- df1new; df2 <-df2new)を割り当てる方が良い場合があります。

2)インデックスそれを交互に次のように記述できます。

df1new <- df1 
df1new[is.na(df2)] <- NA 

df2new <- df2 
df2new[is.na(df1)] <- NA 

3)この1つは良いアイデアですが、それはここで働くことをわからない破壊的なインデックス

df1[is.na(df2)] <- df2[is.na(df1)] <- NA 
関連する問題