在R中生成随机数的缺失值

时间:2014-01-06 14:21:05

标签: r random

我有一个类似的数据框:

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,并且从主题(行)中随机丢失它们。

3 个答案:

答案 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