用 0s 随机替换 dataframe 列中的 1000 个 NA 值,而不覆盖 1s

Replace randomly 1000 NA Values in a dataframe column with 0s, without overwriting 1s

我正在尝试用 0 随机替换数据框列中的 1000 个 NA 值。该列仅由 NA 和 1 组成,看起来像这样:

  Column
1 NA
2 1    
3 NA    
4 NA    
5 NA    
6 1    
7 NA
...

我希望它看起来像这样:

  Column
1 0
2 1    
3 NA    
4 0    
5 NA    
6 1    
7 NA
...

我正在处理的列有 1000 多行,所以最后会有 space 表示 0 和 NA。

我试过这样的事情:

is.na(df_col[sample(seq(nrow(is.na(df_col))), 1000), "Column"]) <- 0

但是,这不起作用。没有 NA 值被替换。如果我取出 is.na()s 它可以工作,但值 1 可能会被替换,我不希望这样。你知道怎么解决吗?

我假设您想替换 1,000 个 NA 值,而不是选择 1,000 个索引并在它们为 NA 时替换它们。以下代码找到 NA 值的索引,然后用 0.

替换其中 1,000 个索引的随机样本
set.seed(123)
df <- tibble(x = rep(c(1, NA), times = 2000))
indices <- which(is.na(df$x))
df[sample(indices, 1000, replace = FALSE), "x"] <- 0