Замена значения во фрейме данных случайным значением (NA существует) - PullRequest
0 голосов
/ 02 декабря 2018

Рассмотрите следующий фрейм данных, затем замените все случайными значениями (не одинаковыми).

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

Ответы [ 2 ]

0 голосов
/ 02 декабря 2018

Мы можем просто умножить на runif, так как любое значение, умноженное на NA, возвращает NA, тогда как умноженное на 1 возвращает значение

dat * runif(length(dat))
#             a          b
# [1,] 0.03501729         NA
# [2,] 0.73306529         NA
# [3,] 0.61079151         NA
# [4,] 0.79167747         NA
# [5,] 0.52095513         NA
# [6,]         NA 0.01196499
# [7,]         NA 0.45024003
# [8,]         NA 0.79531526
# [9,]         NA 0.82090048
#[10,]         NA 0.63468136
#[11,]         NA 0.83556364
0 голосов
/ 02 декабря 2018

Мы могли бы получить индексы значений, где значение равно 1, а затем заменить их случайными значениями, используя runif.

newdat <- dat
inds <- which(newdat == 1)
newdat[inds] <- runif(length(inds))



#                a         b
# [1,] 0.589059571        NA
# [2,] 0.585798106        NA
# [3,] 0.268349643        NA
# [4,] 0.616500063        NA
# [5,] 0.007331229        NA
# [6,]          NA 0.6506516
# [7,]          NA 0.7121793
# [8,]          NA 0.8127495
# [9,]          NA 0.7795301
#[10,]          NA 0.7475504
#[11,]          NA 0.7159547
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...