Рассмотрите следующий фрейм данных, затем замените все случайными значениями (не одинаковыми).
a<- c(rep(1,5),rep(NA,6))
b<- c(rep(NA,5),rep(1,6))
dat<- cbind(a,b)
dat
a b
[1,] 1 NA
[2,] 1 NA
[3,] 1 NA
[4,] 1 NA
[5,] 1 NA
[6,] NA 1
[7,] NA 1
[8,] NA 1
[9,] NA 1
[10,] NA 1
[11,] NA 1
Исходное решение:
dat[dat==1 & !is.na(dat)]<-sapply(dat[dat==1 & !is.na(dat)], function(x) runif(1))
dat
a b
[1,] 0.2334880 NA
[2,] 0.8845379 NA
[3,] 0.6637202 NA
[4,] 0.2647029 NA
[5,] 0.3889980 NA
[6,] NA 0.7698119
[7,] NA 0.4197624
[8,] NA 0.4120188
[9,] NA 0.8229534
[10,] NA 0.7535820
[11,] NA 0.4248589
И вторая часть: сохраните его вновая переменная (dat
переменная остается без изменений)
newdat<- some code