Используя `dplyr :: na_if` с вероятностью создать недостающие данные? - PullRequest
1 голос
/ 19 января 2020

Я заинтересован в симуляции данных с вероятностью пропуска. Как я могу сделать это, используя dplyr::na_if?

Интуитивно я хотел сделать что-то вроде:

mtcars %>% 
  mutate(mpg = na_if(mpg, rbinom(n = n(),
                                 1, 
                                 prob = .5) == 1))

Но я думаю, что это неправильно, потому что na_if действительно для сопоставления x и y. Как я могу использовать na_if для создания вероятности пропуска?

(редактировать: Также, если есть лучшая функция для создания отсутствующих данных в tidyverse, пожалуйста, дайте мне знать в комментариях)

Ответы [ 2 ]

1 голос
/ 19 января 2020

Вам не нужно na_if здесь, просто используйте if_else. rbinom тоже излишне, runif отлично работает.

mtcars %>% 
  mutate(mpg = if_else(runif(n = n()) > 0.5, NA_real_, mpg))
1 голос
/ 19 января 2020

С небольшой модификацией вашего кода:

mtcars %>%
 mutate(mpg = if_else(rbinom(n(), 1, prob = 0.5) == 1, NA_real_, mpg))

    mpg cyl  disp  hp drat    wt  qsec vs am gear carb
1  21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
2  21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
3  22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
4    NA   6 258.0 110 3.08 3.215 19.44  1  0    3    1
5  18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
6    NA   6 225.0 105 2.76 3.460 20.22  1  0    3    1
7  14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
8  24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
9  22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
10   NA   6 167.6 123 3.92 3.440 18.30  1  0    4    4
...