在不丢失行名和列名的情况下填写R数据框中的缺失值?

pen*_*uin 3 r dataframe

我有2个R数据帧.

df1 <- data.frame(a = c(1, 2, NA), b = c(10, NA, 2), c = c(NA, NA, 1))
df2 <- data.frame(a = c(NA, NA, 3), b = c(NA, 5, NA), c = c(6, NA, NA))
Run Code Online (Sandbox Code Playgroud)

目前在价值观df1NAdf2反之亦然.某些值都NA在两个数据框中.我想创建一个新的数据框,其中包含值df1df2存在值的值,而不会丢失列名和行名.

我能想到的一个简单的解决方案是使用for循环.

df_merged <- df1

for(i in 1:nrow(df_merged)){
  for(j in 1:ncol(df_merged)){
    if(is.na(df_merged[i,j])){
      df_merged[i,j] = df2[i,j]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

最后,df_merged将是这个

df_merged
  a  b  c
1 1 10  6
2 2  5 NA
3 3  2  1
Run Code Online (Sandbox Code Playgroud)

我知道R中的for循环非常慢.有没有更好的解决方案呢?

nic*_*ola 9

试一试:

df1[is.na(df1)]<-df2[is.na(df1)]
df1
#  a  b  c
#1 1 10  6
#2 2  5 NA
#3 3  2  1
Run Code Online (Sandbox Code Playgroud)