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

你想要一个ifelse()表达式:

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

不尝试将if语句的结果分配给向量,这没有任何意义。

[仅为 David Arenburg 编辑:如果这还不够明确,则在 R 中,如果语句未矢量化,因此只能处理标量表达式,因此它们不是 OP 所需要的。昨天我已经标记了“矢量化”这个问题,并且 OP 可以免费阅读 R 中的矢量化,其中有成千上万的优秀文章和教程。]

于 2014-11-16T09:52:11.313 回答
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 回答