在R数据框中填充丢失的值而不丢失行名和列名?

时间:2018-07-23 10:10:52

标签: 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))

df1中存在的值是NA中的df2,反之亦然。两个数据帧中的某些值为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]
    }
  }
}

最后,df_merged是这个

df_merged
  a  b  c
1 1 10  6
2 2  5 NA
3 3  2  1

我知道for循环在R中非常慢。对此是否有更好的解决方案?

1 个答案:

答案 0 :(得分: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