我有两个大型数据帧,具有相同的列和行,但我需要替换第一个 NA ,基于第二个 . 例如假设数据框"DF1"是
NA
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 ,我们用它来选择 DF3 中要替换的值,以及 DF2 中的值来替换它们 .
DF3
DF1
replace.bool.matrix
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)]
2 回答
这应该是诀窍:
说明:
我们创建
DF3
,它是DF1
的副本 . 然后我们创建一个逻辑矩阵replace.bool.matrix
,我们用它来选择DF3
中要替换的值,以及DF2
中的值来替换它们 .这使用select operations on data frames,有很多教程 .
使用match()函数更容易: