用另一个数据框中的值替换数据框中的NA

4

我想在R程序中用另一个数据框中相同位置的值替换数据框中的空值。例如:

A<- data.frame(matrix(ncol = 5, nrow = 2)) 
A[1,] <- c(1,NA,2,2,4)   
A[2,] <- c(1,NA,NA,2,4) 

B<- data.frame(matrix(ncol = 5, nrow = 2)) 
B[1,] <- c(2,3,4,2,4)   
B[2,] <- c(1,4,7,2,9) 

新数据框应该是:
A_updated<- data.frame(matrix(ncol = 5, nrow = 2)) 
A_updated[1,]<-c(c(1,3,2,2,4)   
A_updated[2,]<-c(c(1,4,7,2,4)

这是否可能,如果可能,有人能帮助我吗。

非常感谢您提前的帮助。


6
你可以使用A[is.na(A)] <- B[is.na(A)]来完成操作。 - Ritchie Sacramento
3个回答

5

您可以这样做

B*is.na(A) + replace(A,is.na(A),0)

或者
replace(A,is.na(A),B[is.na(A)])

或者一个更简单的解决方案(由@27 ϕ 9在评论中提供)

A[is.na(A)] <- B[is.na(A)]

3
一个可以泛化至两个以上数据框的 `data.table` 解决方案。
library(data.table)
A[] <- mapply(fcoalesce, A, B) # You could do mapply(fcoalesce, A, B, C, etc.) 

1
我们可以使用dplyr中的coalesce
library(dplyr)
library(purrr)
map2_dfc(A, B, coalesce)
# A tibble: 2 x 5
#     X1    X2    X3    X4    X5
#  <dbl> <dbl> <dbl> <dbl> <dbl>
#1     1     3     2     2     4
#2     1     4     7     2     4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接