# [R] Adding NA values in random positions in a dataframe

arun smartpink111 at yahoo.com
Fri Nov 29 19:09:02 CET 2013

```Hi,
I used that because 10% of the values in the data were already NA.

You are right.  Sorry, ?match() is unnecessary.  I was trying another solution with match() which didn't work out and forgot to check whether it was adequate or not.
set.seed(49)
dat1[!is.na(dat1)][sample(seq(dat1[!is.na(dat1)]),length(dat1[!is.na(dat1)])*(0.20))] <- NA
A.K.

Thanks for the reply. I don't get the 0.20 multiplied by the length of the non NA value, where did you take it from?

Furthermore, why do we have to use the function match? Wouldn't it be enough to use the saple function?

On Thursday, November 28, 2013 12:57 PM, arun <smartpink111 at yahoo.com> wrote:
Hi,
One way would be:
set.seed(42)
dat1 <- as.data.frame(matrix(sample(c(1:5,NA),50,replace=TRUE,prob=c(10,15,15,20,30,10)),ncol=5))
set.seed(49)
dat1[!is.na(dat1)][ match( sample(seq(dat1[!is.na(dat1)]),length(dat1[!is.na(dat1)])*(0.20)),seq(dat1[!is.na(dat1)]))] <- NA
length(dat1[is.na(dat1)])/length(unlist(dat1))
#[1] 0.28

A.K.

Hello, I'm quite new at R so I don't know which is the most efficient
way to execute a function that I could write easily in other languages.

This is my problem: I have a dataframe with a certain numbers of
NA (approximately 10%). I want to add other NA values in random
positions of the dataframes until reaching an overall proportions of NA
values of 30% (clearly the positions with NA values don't have to
change). I tried looking at iterative function in R as apply or sapply
but I can't actually figure out how to use them in this case. Thank you.

```