我正在尝试将数据框中的列中的 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]]
我不确定我在这里做错了什么。
谢谢
我正在尝试将数据框中的列中的 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]]
我不确定我在这里做错了什么。
谢谢
你想要一个ifelse()表达式:
fDF[columns[1]] <- ifelse(is.na(fDF[columns[1]]), fDF[columns[2]], fDF[columns[1]])
不尝试将if语句的结果分配给向量,这没有任何意义。
[仅为 David Arenburg 编辑:如果这还不够明确,则在 R 中,如果语句未矢量化,因此只能处理标量表达式,因此它们不是 OP 所需要的。昨天我已经标记了“矢量化”这个问题,并且 OP 可以免费阅读 R 中的矢量化,其中有成千上万的优秀文章和教程。]
您可以将以下代码调整为您的数据:
> 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
>