因子变量标签但按比例

Factor Variable Labelling but proportionally

我正在组织数据集,但在因子变量方面遇到了问题。我的性别变量总数为 3246,其中大多数是男性。我在性别类别中有 50 NA。我不想删除带有 NA 的观察结果,但也不想将其全部替换为 'male' 或 'female'。我想随机将 7 个 NA 更改为 'female',将 43 个更改为 'male'。但是,我做不到。

我已经知道如何将 NA 更改为一种类型。

data$Gender[is.na(data$Gender)] = 'male'

您可以使用 is.na() 将变量子集化为 na 对象,从 sum 的值 universe 中创建一个 sample ] na 中的 TRUE 个,并用新样本替换子集。这里有一个例子:

## example data
n <- 1e3
set.seed(42)
x <- sample(c('f', 'm'), n, replace=TRUE)
x[sample(length(x), 50)] <- NA
table(x, useNA="ifany")
# x
#     f    m <NA> 
#   476  474   50 

## solution 1
u <- unique(na.omit(x))  ## value universe  
na <- is.na(x)  ## subset variable
x[na] <- sample(u, sum(na), replace=TRUE)  ## new sample
table(x, useNA="ifany")  ## result
# x
#   f   m 
# 504 496 

您也可以使用非缺失数据的比例来创建女性和男性,如下所示:

## solution 2 (Note: Create example data again from above)
p <- proportions(table(x))  ## proportions
na <- is.na(x)  ## subset variable
x[na] <- sample(names(p), sum(na), replace=TRUE, prob=p)  ## new sample
table(x, useNA="ifany")  ## result
# x
#   f   m 
# 500 500