从另一个数据框中填充数据框中的缺失值

3

我有一个行列名为N x M的数据框DF1,其中许多值都是NA。还有一个第二个数据框DF2(1 x M,因此实际上可以是向量),其行名与DF1相同。我想使用DF2来填充DF1列中的缺失值。

非常感谢任何帮助。

Udp:抱歉,真的应该附加一个示例

带有NA的数据框

> df = data.frame(matrix(rnorm(9), nrow=3))
> df[1,1] <- NA
> df[2,2] <- NA
> df[3,3] <- NA
          X1         X2         X3
1         NA -0.1364313         NA
2 -0.7473972         NA -0.1662138

替换值(行名、列名相同-不相关)
df2 = data.frame(c(1,2))
  c.1..2.
1       1
2       2

期望输出:

          X1         X2         X3
1         1  -0.1364313          1
2 -0.7473972          2 -0.1662138

如果DF2是M x 1,那么如何填充DF1呢?DF1将有DF2的n倍单元格。 - cgage1
你需要提供一个问题的例子,包括样本数据和你期望的输出。 - SymbolixAU
请提供可重现的代码和样本数据 - HubertL
@Symbolix 完成了。感谢您的反馈。希望现在更加清晰明了! - Alexey
为什么 df[1,3] = NA - SymbolixAU
2个回答

1
这是我认为的一种方法。首先,我创建一个新的data.frame(new_df),只选择匹配的行,然后对数据执行sapply以替换NA值。
set.seed(123)
df = data.frame(matrix(rnorm(9), nrow=3))
 df[1,1] <- NA
 df[2,2] <- NA
 df[3,3] <- NA
 df2 <- data.frame(c(1,2))
#create new data.frame
new_df <- df[which(row.names(df2) == row.names(df)),]
#use sapply() 
t(sapply(row.names(df2), FUN = function(x) 
     ifelse(is.na(new_df[row.names(new_df) == x,]), 
            df2[row.names(df2)== x,], 
            new_df[row.names(new_df) == x,])))

  [,1]       [,2]       [,3]     
1 1          0.07050839 0.4609162
2 -0.2301775 2          -1.265061

请注意,这将导致列名丢失...这可能意味着有更好的方法。另外,我的数据不同,因为我们没有使用set.seed

1
您也可以使用简单的for循环来处理这个问题:
for(i in 1:dim(df)[1]){
    df[i,is.na(df[i,])] <- df2[i,]
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接