如何用 R 中的其他数据帧替换一个数据帧的某些值?

How to substitute some values of one dataframe with other data frame in R?

我有两个大数据框,具有相同的列和行,但我需要根据第二个替换第一个的 NA。例如假设数据框 "DF1" 是

DF1 <- data.frame(a=c(1,NA,3), b=c(4,NA,6))

并且 "DF2" 是

D2 <- data.frame(a=c(NA,2,NA), b=c(3,5,6))

当"DF1"中有NA时,我想用"DF2"替换"DF1",并创建一个新的"DF3",即

a   b
1   4
2   5
3   6

你能帮我解决这个问题吗?

这应该可以解决问题:

DF3 <- DF1
replace.bool.matrix <- is.na(DF1)
DF3[replace.bool.matrix] <- DF2[replace.bool.matrix]

解释:

我们创建 DF3,它是 DF1 的副本。然后我们创建一个逻辑矩阵 replace.bool.matrix,我们用它来 select DF3 中的值来替换,以及 DF2 中的值来替换它们。

这利用了select operations on data frames,有很多教程。

使用 match() 函数更容易:

 df1 <- data.frame(steps=c(NA,NA,NA,NA,NA,NA,NA,NA),date=c('2012-10-01','2012-10-01','2012-10-01','2012-10-01','2012-10-01','2012-10-01','2012-10-02','2012-10-02'), interval=c(0,5,10,15,20,25,0,5))

df2 <- data.frame(Interval=c(0,5,10,15,20,25),x=c(1.716,0.339,0.132,0.151,0.075,2.094))
if (is.na(df1$steps)==TRUE) df1$steps <- df2$x[match(df1$interval,df2$Interval)]