我有一个类似的数据框:
df<-data.frame(time1=rbinom(100,1,0.3),
time2=rbinom(100,1,0.4),
time3=rbinom(100,1,0.5),
time4=rbinom(100,1,0.6))
如何为每个时间变量生成随机缺失值,最多丢失20%?也就是说,在这种情况下,每列中丢失的总数少于20,并且从主题(行)中随机丢失它们。
答案 0 :(得分:7)
你可以这样做:
insert_nas <- function(x) {
len <- length(x)
n <- sample(1:floor(0.2*len), 1)
i <- sample(1:len, n)
x[i] <- NA
x
}
df2 <- sapply(df, insert_nas)
df2
这将为您提供每列最多20%的缺失
colSums(is.na(df2)) / nrow(df2)
time1 time2 time3 time4
0.09 0.16 0.19 0.14
答案 1 :(得分:4)
这是一种方式:
as.data.frame(lapply(df, function(x)
"is.na<-"(x, sample(seq(x), floor(length(x) * runif(1, 0, .2))))))
答案 2 :(得分:0)
这样的话,你的意思是?
nomissing <- sample(1:20,1)
testnos <- rbinom(100 - nomissing,1,0.3)
testnas <- rep(NA,nomissing)
testmix <- sample(x = c(testnos,testnas),100)
输出 -
> testmix
[1] 1 0 0 0 0 0 1 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
[37] 1 0 0 0 1 1 0 1 0 0 1 0 0 0 0 1 0 1 0 0 0 0 0 1 0 1 0 0 1 1 1 NA 0 1 0 0
[73] 0 0 1 1 0 0 1 0 0 1 1 0 0 NA 1 0 0 0 0 0 1 0 NA NA 1 0 0 0