用向量中的元素替换数据框列中的 NA 值
Replace NA values in a data frame column with values with elements from a vector
所以我有一个 100x20 的数据框,其中随机包含 NA 值。我还有一个长度为 20 的向量。
我想用向量的索引替换每个特定列的所有 NA 值。因此,假设我的数据框中第 1 列中的所有 NA 值都应替换为我的向量的第一个值,第 2 列中的所有 NA 值应替换为我的向量的第二个值,依此类推。
我可以用 for 循环来完成,但我知道我可以更轻松地做到这一点。我四处寻找类似的问题,但找不到任何问题。如果这是重复的,那么我很抱歉。
我们可以通过复制 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
元素的相应列 NA
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)
所以我有一个 100x20 的数据框,其中随机包含 NA 值。我还有一个长度为 20 的向量。
我想用向量的索引替换每个特定列的所有 NA 值。因此,假设我的数据框中第 1 列中的所有 NA 值都应替换为我的向量的第一个值,第 2 列中的所有 NA 值应替换为我的向量的第二个值,依此类推。
我可以用 for 循环来完成,但我知道我可以更轻松地做到这一点。我四处寻找类似的问题,但找不到任何问题。如果这是重复的,那么我很抱歉。
我们可以通过复制 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
元素的相应列 NA
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)