将数据框列中的NA值替换为包含向量元素的值

时间:2017-10-30 16:31:42

标签: r na

所以我有一个100x20的数据帧,它随机包含NA值。我还有一个长度为20的向量。

我想用向量的索引替换每个特定列的所有NA值。因此,假设我的数据框中第1列中的所有NA值都应该替换为向量的第一个值,第2列中的所有NA值都应该替换为向量的第2个值,依此类推。

我可以用for循环来做,但我知道我可以更容易地做到这一点。我一直在寻找类似的问题,但找不到任何问题。如果这是重复,那么我的appologies。

1 个答案:

答案 0 :(得分:2)

我们可以通过复制vector

来完成作业
i1 <- is.na(df)
df[i1] <- v1[col(df)][i1]

或者我们可以使用

v1[col(df)]*is.na(df) + replace(df, is.na(df), 0)

或者我们可以使用Map replace vector对应的{NAL} df[] <- Map(function(x, y) replace(x, is.na(x), y), df, v1) 元素列

set.seed(24)
df <- as.data.frame(matrix(sample(c(NA, 1:5), 100*20, replace = TRUE), ncol = 20))
set.seed(48)
v1 <- sample(1:10, 20, replace = TRUE)

数据

sbt assembly