用其他数据框中的值替换数据框中的NA

时间:2020-08-10 12:36:17

标签: r dataframe na

对于我的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)

这有可能吗,如果可以的话,有人可以帮助我吗?

非常感谢

3 个答案:

答案 0 :(得分:4)

你可以做

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)]

答案 1 :(得分:3)

一种data.table解决方案,可以推广到两个以上的数据帧。

library(data.table)
A[] <- mapply(fcoalesce, A, B) # You could do mapply(fcoalesce, A, B, C, etc.) 

答案 2 :(得分:2)

我们可以使用coalesce中的dplyr

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