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

标签 r na

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

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

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

最佳答案

我们可以通过复制向量来完成分配

i1 <- is.na(df)
df[i1] <- v1[col(df)][i1]

或者我们可以使用

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

或者我们可以使用Map将相应的列NA替换为vector元素

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)

关于将数据框列中的 NA 值替换为向量中元素的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47020099/

相关文章:

r - 数据转换: spread categorical data frame to counts R

使用 dplyr 删除列

R gbm处理缺失值

r - glmnet 如何处理 NA 值?

用特定变量名替换列中的 NA

r - 数据帧过滤

r - 使用 := in data. 表,其中包含 i 的子集和更新向量

r - 在 R 中查找强簇和弱簇及其成员资格

r - 为什么我会得到 "unused argument (na.action = NULL)"聚合错误?

r - 如何仅在 R 中的两列中省略带有 NA 的行?