R:随机选择女性或男性来估算 NA
R: Imputing NAs with random choice of female or male
我在 R 工作
我有一个包含女性或男性和一些 NA 的数据框列。
现在,我想将女性或男性随机分配给此列中的 NA 值。我不想让所有的 NA 都是男性或女性,但每个 NA 随机分配为或。
我该怎么做?
最好的,
corkinabottle
一个选项是获取列中 NA
元素的索引,然后使用 sample
并指定 size
作为 NA 元素的数量,以将这些 NA 替换为male
或 female
采样
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
我在 R 工作
我有一个包含女性或男性和一些 NA 的数据框列。
现在,我想将女性或男性随机分配给此列中的 NA 值。我不想让所有的 NA 都是男性或女性,但每个 NA 随机分配为或。
我该怎么做?
最好的, corkinabottle
一个选项是获取列中 NA
元素的索引,然后使用 sample
并指定 size
作为 NA 元素的数量,以将这些 NA 替换为male
或 female
采样
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