R:随机选择女性或男性来估算 NA

R: Imputing NAs with random choice of female or male

我在 R 工作

我有一个包含女性或男性和一些 NA 的数据框列。

现在,我想将女性或男性随机分配给此列中的 NA 值。我不想让所有的 NA 都是男性或女性,但每个 NA 随机分配为或。

我该怎么做?

最好的, corkinabottle

一个选项是获取列中 NA 元素的索引,然后使用 sample 并指定 size 作为 NA 元素的数量,以将这些 NA 替换为malefemale 采样

i1 <- is.na(df1$col1)
df1$col1[i1] <- sample(c('male', 'female'), size = sum(i1), replace = TRUE)

-输出

df1
#    col1 col2
#1      a    1
#2 female    2
#3      b    3
#4   male    4
#5      a    5
#6      c    6
#7 female    7

数据

df1 <- data.frame(col1 = c('a', NA, 'b', NA, 'a', 'c', NA), col2 = 1:7)

使用 dplyr,您可以根据列是否为 NA 应用 if_else,然后从 m/f 中随机抽样并替换。

使用@akrun 的df1:

library(dplyr)

df1 %>% 
  mutate(across(col1, ~if_else(is.na(.), sample(c("m", "f"), n(), replace = TRUE), .)))

输出

  col1 col2
1    a    1
2    f    2
3    b    3
4    m    4
5    a    5
6    c    6
7    m    7