2017-10-29 13 views
1

データフレームに条件付きの列を追加しようとしていますが、期待した結果が得られません。if {} else {}を使用してデータフレームに新しい列を作成するR

私は、さまざまな日に5分間隔で列「ステップ」に記録された値を持つデータフレームを持っています。私は測定をしている日に与えられた5分の間隔の平均ステップ数を使って、「ステップ」列に欠損値を代入しようとしています。 n.b.私はMICEパッケージを使ってこれを試してみましたが、コンピュータをクラッシュさせたので、より手作業の回避策を選択しました。

中間段階として、既存のデータフレームに追加の列を、その間隔の平均ステップ数でバインドしました。私が次にやりたいことは、生の段数がNULLの場合はその意味を返し、NULLでない場合は生の値を使用する列を作成することです。私が起こることを期待したもの

activityTimeAvgs$stepsImp <- if(is.na(activityTimeAvgs$steps)){ 
    activityTimeAvgs$avgsteps 
} else { 
    activityTimeAvgs$steps 
} 

は、if文は「ステップ」はNAであればTRUEとして評価し、結果的に与えることである「avgsteps」;:ここではその一部のための私のコードです'steps'がNAでない場合は、 'steps'の生の値だけを使用すると考えられます。しかし、出力は単にすべての行で 'avgsteps'の値を与えますが、あまり役に立ちません。また、次の警告が表示されます。

Warning message: 
In if (is.na(activityTimeAvgs$steps)) { : 
    the condition has length > 1 and only the first element will be used 

私は間違っていますか?

ありがとうございます。

+0

あなたがそのようであれば、{}ステートメントを使用したい場合は、ループ、または類似した何かのために行を下に反復する必要があります。 janosによって提案されたifelse()関数は、あなたの問題をよりよく解決します。 –

答えて

3

ifステートメントはこれには適していません。あなたはifelseを使用する必要があります。

activityTimeAvgs$stepsImp <- ifelse(is.na(activityTimeAvgs$steps), activityTimeAvgs$avgsteps, activityTimeAvgs$steps) 
関連する問題