我如何在模拟数据框中随机添加缺失值到某些列或每列(比如每列随机缺失约 5%),此外,是否有更有效的方法来模拟具有连续列和因子列的数据框?
#Simulate some data
N <- 2000
data <- data.frame(id = 1:2000,age = rnorm(N,18:90),bmi = rnorm(N,15:40),
chol = rnorm(N,50:350), insulin = rnorm(N,2:40),sbp = rnorm(N, 50:200),
dbp = rnorm(N, 30:150), sex = c(rep(1, 1000), rep(2, 1000)),
smoke = rep(c(1, 2), 1000), educ = sample(LETTERS[1:4]))
#Manually add some missing values
data <- data %>%
mutate(age = "is.na<-"(age, age <19 | age >88),
bmi = "is.na<-"(bmi, bmi >38 | bmi <16),
insulin = "is.na<-"(insulin, insulin >38),
educ = "is.na<-"(educ, bmi >35))
最佳答案
我认为最好的解决方案是为此使用mice 包。这是一个专门用于插补的 R 包。它还有一个名为 amputate 的函数,用于将丢失的数据引入 data.frame。
ampute - Generate Missing Data For Simulation Purposes This function generates multivariate missing data in a MCAR, MAR or MNAR manner.
此解决方案的优点是您可以设置多个参数来模拟丢失的数据。
ampute(data, prop = 0.5, patterns = NULL, freq = NULL, mech = "MAR",
weights = NULL, cont = TRUE, type = NULL, odds = NULL,
bycases = TRUE, run = TRUE)
如您所见,您可以设置缺失值的百分比、缺失数据机制(MCAR 将是您选择的完全随机缺失)和其他几个参数。该解决方案也非常干净,因为它只有 1 行代码。
关于r - 模拟数据并将缺失值随机添加到数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50528719/