我有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
。我想创建一个新数据框,该框具有df1
和df2
中的值(无论该值存在于何处),而不会丢失列名和行名。
我能想到的一个简单的解决方案是使用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中非常慢。对此是否有更好的解决方案?
答案 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