对于我的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)
这有可能吗,如果可以的话,有人可以帮助我吗?
非常感谢
答案 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