我有一个带行和列名称的N x M数据帧DF1,其中许多值都是NA。存在第二个数据帧DF2(1×M,因此实际上可以是矢量),其行名称与DF1相同。我想使用DF2来填充DF1列中的缺失值。
任何帮助都会非常感激。
Udp:对不起,真的应该附上一个例子
具有NAs的数据帧
> 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
答案 0 :(得分: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 :(得分:1)
您还可以执行一个简单的for循环来处理这个问题:
for(i in 1:dim(df)[1]){
df[i,is.na(df[i,])] <- df2[i,]
}