0

データ フレームの列の NA 値を、同じ行の別の列の値に置き換えようとしています。値を置き換える代わりに、列全体が削除されたようです。

fDF は、一部の値が NA であるデータ フレームです。列1にNA値がある場合、列2の値に置き換えたい.

fDF[columns[1]] = if(is.na(fDF[columns[1]]) == TRUE & 
                     is.na(fDF[columns[2]]) == FALSE) fDF[columns[2]]

ここで何が間違っているのかわかりません。

ありがとう

4

2 に答える 2

0

次のコードをデータに合わせて調整できます。

> ddf
   xx yy    zz
1   1 10 11.88
2   2  9    NA
3   3 11 12.20
4   4  9 12.48
5   5  7    NA
6   6  6 13.28
7   7  9 13.80
8   8  8 14.40
9   9  5    NA
10 10  4 15.84
11 11  6 16.68
12 12  6 17.60
13 13  5 18.60
14 14  4 19.68
15 15  6    NA
16 16  8 22.08
17 17  4 23.40
18 18  6 24.80
19 19  8    NA
20 20 11 27.84
21 21  8 29.48
22 22 10 31.20
23 23  9 33.00
> 
> 
> idx = is.na(ddf$zz)
> idx
 [1] FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE
[22] FALSE FALSE
> 
> ddf$zz[idx]=ddf$yy[idx]
> 
> ddf
   xx yy    zz
1   1 10 11.88
2   2  9  9.00
3   3 11 12.20
4   4  9 12.48
5   5  7  7.00
6   6  6 13.28
7   7  9 13.80
8   8  8 14.40
9   9  5  5.00
10 10  4 15.84
11 11  6 16.68
12 12  6 17.60
13 13  5 18.60
14 14  4 19.68
15 15  6  6.00
16 16  8 22.08
17 17  4 23.40
18 18  6 24.80
19 19  8  8.00
20 20 11 27.84
21 21  8 29.48
22 22 10 31.20
23 23  9 33.00
> 
于 2014-11-16T14:10:01.723 に答える
0

式が必要ですifelse()

fDF[columns[1]] <- ifelse(is.na(fDF[columns[1]]), fDF[columns[2]], fDF[columns[1]])

ステートメントの結果をifベクトルに代入しようとしていないため、意味がありません。

[David Arenburg のみの編集: それがまだ十分に明示されていない場合、R の if ステートメントはベクトル化されていないため、スカラー式しか処理できないため、OP が必要とするものではありません。昨日、すでに「ベクトル化」という質問にタグを付けていました。OP は、何千もの優れた記事やチュートリアルのいずれかで、R でのベクトル化について自由に読むことができます。]

于 2014-11-16T09:52:11.313 に答える