2016-08-03 19 views
4

私は2つの変数DTとODを含むデータフレーム結合を持っています。"置き換えるアイテムの数が置換の長さの倍数ではありません"

DTとODの両方に欠損値NAがありますが、必ずしも同じレコードである必要はありません。

ODに欠損値がない場合はDTの欠損値を置き換えようとしますが、「交換するアイテムの数は交換長の倍数ではありません」という警告を取得します。私はそれが長さの不一致を意味することがわかりますが、同じデータフレーム内の2つの列が異なる長さを持つ理由を理解できません。もっと真剣に、出力はありません完全に正確である(下記参照)

combi$DT[is.na(combi$DT) & ! is.na(combi$OD) ] <- combi$OD 

出力

id DT   OD 
67 2010-12-12 2010-12-12 
68 NA   NA 
69 NA   2010-12-12 
70 NA   NA 

私は(日付はPOSIXctある)id=69ため2010-12-12するDTを期待しているだろう。

データフレームの長さについてはわかりません。誰でも助けることができますか?

答えて

3

置き換えられるアイテムの数が置換の長さの倍数ではないためです。置き換える項目の数は、の行の数がcombi(したがって置換の長さ)の行の数よりも少ない行の数です。

あなたはifelseを使用する必要があります。

combi$DT <- ifelse(is.na(combi$DT) & !is.na(combi$OD), combi$OD, combi$DT) 

N.B. & !is.na(combi$OD)は冗長です。両方がNAの場合、交換はNAになります。だから使えるだけです

combi$DT <- ifelse(is.na(combi$DT), combi$OD, combi$DT) 
+0

ありがとうございます。今、私は上記がうまくいかなかった理由を完全に理解しています。 Stackoverflowとcmmunityが素晴らしい –

3

がNA以外の場所にすべてcombi$ODを割り当てようとしているため、警告が表示されます。たとえば、5つのNAsを持つ2つの変数の100行がある場合、variable1の5つのNAsをvariable2の100の値に置き換えるように指示しています。したがって警告。これを代わりに試してください

combi$DT[is.na(combi$DT) & !is.na(combi$OD)] <- combi$OD[is.na(combi$DT) & !is.na(combi$OD)] 
+1

ありがとうございます。 –

+1

私のような初心者を助けてくれてありがとう。私はその特徴を知りませんでした。私は受け入れられた記号をクリックしました。 –

+0

@JørgenK.Kanters問題はありません。助けて幸いです – Sotos